事务
事务是什么?
- 定义: 一组数据库操作的集合, 具有原子性;
- 原子性: 事务中的操作要么全部执行, 要么都不执行;
- 可串行化: 并发事务的执行结果, 等价于它们按某一顺序串行执行;
- 用途: 数据库用事务解决并发操作导致的错误;
只读事务有什么特点?
- 定义: 只有读操作的事务;
- 特点: 不会修改数据库, 因此可以并行执行;
- 声明:
SET TRANSACTION READ ONLY; -- 下一条事务只读
SET TRANSACTION READ WRITE; -- 下一条事务可写
脏数据与脏读是什么?
- 脏数据: 事务中写入但尚未提交的数据;
- 清理: 事务一旦失败, 脏数据立刻被移除;
- 脏读: 一个事务读取到另一个事务尚未提交的脏数据;
隔离层次有哪些?
| 层次 | 约束 |
|---|---|
| 可串行化 | 默认层次, 并发结果等价于串行执行 |
| 读未提交 | 允许脏读 |
| 读提交 | 禁止脏读, 但同一事务多次执行同一查询可能得到不同答案 |
| 可重复读 | 禁止脏读, 且同一事务多次执行同一查询得到相同答案 |
SET TRANSACTION READ WRITE ISOLATION LEVEL READ UNCOMMITTED; -- 读未提交
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 可串行化
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 读提交
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- 可重复读
- 注意: 默认层次沿用本教程口径, 具体数据库的默认隔离层次可能不同;
(source: 050-sql.md §事务/§只读事务/§脏数据/§隔离层次)