数据库基础:TCL事务与DDL视图

数据库基础:TCL事务与DDL视图

前言 :本文是"数据库基础"系列的第八篇。前两篇我们学习了 DQL(数据查询语言)和 DML(数据操作语言),掌握了数据的增删改查。本篇我们将学习两个重要的数据库概念------事务 和视图。事务属于 TCL(事务控制语言),用于保证多条 SQL 语句要么全部执行成功,要么全部回滚,确保数据的一致性和完整性;视图属于 DDL(数据定义语言),是一种虚拟表,可以将复杂的查询语句封装起来,简化后续的使用。

目录

  • 一、事务(TCL)
  • 二、视图(DDL)
  • 三、总结

一、事务(TCL)

1.1 什么是事务?

事务是由一组 SQL 语句组成的执行单元 ,这个单元要么全部执行成功 ,要么全部执行失败。事务是保证数据一致性的重要机制。

通俗理解:转账操作就是一个典型的事务。用户 A 给用户 B 转账 500 元,需要执行两条 SQL:A 账户减 500,B 账户加 500。如果第一条执行成功,第二条因为意外失败,数据就会出现不一致。事务的作用就是保证这两条 SQL 要么都成功,要么都失败。

1.2 事务的四大特性(ACID)

特性 说明
原子性(Atomicity) 事务是不可分割的最小工作单元,要么全部执行,要么全部不执行
一致性(Consistency) 事务执行前后,数据从一个一致状态切换到另一个一致状态
隔离性(Isolation) 一个事务的执行不受其他事务的干扰
持久性(Durability) 事务一旦提交,对数据库的修改就是永久的

1.3 事务的基本操作

sql 复制代码
-- 开启事务
START TRANSACTION;

-- 执行 SQL 语句
UPDATE accounts SET balance = balance - 500 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 500 WHERE user_id = 2;

-- 提交事务(确认修改)
COMMIT;

-- 或回滚事务(撤销修改)
ROLLBACK;

1.4 事务的隔离级别

多个事务同时执行时,可能会出现脏读、不可重复读、幻读等问题。SQL 标准定义了四种隔离级别:

隔离级别 说明
READ UNCOMMITTED 允许读取未提交的数据(会出现脏读)
READ COMMITTED 只能读取已提交的数据(可避免脏读)
REPEATABLE READ 同一事务中多次读取结果一致(MySQL 默认级别)
SERIALIZABLE 串行化执行,性能最低,安全性最高

二、视图(DDL)

2.1 什么是视图?

视图(View)是一种虚拟表 ,它不存储实际数据,而是保存了一条 SELECT 查询语句。当用户查询视图时,数据库会自动执行这条查询语句,并返回结果。

通俗理解:视图就像一扇"窗户",通过它可以看到底层表中经过筛选和加工后的数据。视图本身不存数据,只是"看"数据的一种方式。

2.2 为什么使用视图?

优点 说明
简化查询 将复杂的多表连接查询封装为视图,使用时只需 SELECT * FROM 视图名
提高复用性 一处定义,多处使用
数据安全 只暴露必要的字段,隐藏敏感信息
逻辑独立性 底层表结构变化时,视图可以保持不变

2.3 创建视图

语法:

sql 复制代码
CREATE VIEW 视图名
AS
查询语句;

示例:

sql 复制代码
-- 创建视图:查询员工的姓名、部门名和工种名
CREATE VIEW v_emp_info
AS
SELECT 
    e.last_name,
    d.department_name,
    j.job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id;

-- 使用视图查询姓中包含 'a' 的员工
SELECT * FROM v_emp_info WHERE last_name LIKE '%a%';

2.4 修改视图

方式一:CREATE OR REPLACE VIEW

sql 复制代码
CREATE OR REPLACE VIEW v_emp_info
AS
SELECT department_name, job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id;

方式二:ALTER VIEW

sql 复制代码
ALTER VIEW v_emp_info
AS
SELECT * FROM employees;

2.5 删除视图

语法:

sql 复制代码
DROP VIEW 视图名1, 视图名2, ...;

示例:

sql 复制代码
DROP VIEW v_emp_info;

2.6 视图与表的对比

对比维度 表 视图
存储数据 存储实际数据 只保存查询语句,不存数据
占用空间 占用磁盘空间 几乎不占用
增删改操作 支持 有一定限制(简单视图支持)
作用 存储基础数据 封装复杂查询,提供安全访问

三、总结

核心脉络

事务(TCL)

  • 事务是一组 SQL 语句的执行单元,要么全部执行,要么全部回滚
  • 四大特性:原子性、一致性、隔离性、持久性(ACID)
  • START TRANSACTION 开启,COMMIT 提交,ROLLBACK 回滚
  • MySQL 默认隔离级别为 REPEATABLE READ

视图(DDL)

  • 视图是虚拟表,不存数据,只存 SELECT 语句
  • 创建:CREATE VIEW 视图名 AS 查询语句
  • 修改:CREATE OR REPLACE VIEW 或 ALTER VIEW
  • 删除:DROP VIEW 视图名

注意事项

要点 说明
事务提交后不可回滚 COMMIT 后数据已持久化,无法撤销
视图不支持索引 查询视图本质是查询底层表,索引建在底层表上
视图的增删改限制 多表连接视图通常不支持插入和删除操作
事务隔离级别越高 数据一致性越好,但并发性能越低

系列直达

相关推荐
bksczm29 分钟前
MySQL之存储引擎
数据库·mysql
大模型最新论文速读1 小时前
text-to-sql:从学术玩具到生产落地
数据库·sql
ManageEngineITSM1 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
ClouGence2 小时前
MongoDB 双向同步如何防止数据循环?(附实操指南)
数据库·mongodb
TDengine (老段)2 小时前
TDengine IDMP 十大实用功能(7)
数据库·物联网·时序数据库·tdengine·涛思数据·工业数据·idmp
Decay__2 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
zjx23882 小时前
oracle11g转Gbase8s库SQL常见问题修改
数据库·sql
真上帝的左手2 小时前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件
雪芽蓝域zzs2 小时前
第 2 章:整合 MySQL + MyBatis,搭建数据库基础、实体类、Mapper、测试查询
数据库·mysql·mybatis
实泽有之,无泽虚之3 小时前
SQL Server数据库备份与还原详解
数据库·sqlserver