数据库基础: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 后数据已持久化,无法撤销 |
| 视图不支持索引 | 查询视图本质是查询底层表,索引建在底层表上 |
| 视图的增删改限制 | 多表连接视图通常不支持插入和删除操作 |
| 事务隔离级别越高 | 数据一致性越好,但并发性能越低 |
系列直达
- 上篇 :数据库基础:DDL数据定义语言
- 本篇:数据库基础:TCL事务与DDL视图(本文)
- 下篇:敬请期待