跳到主要内容

事务

事务是什么?​

  • 定义: 一组数据库操作的集合, 具有原子性;
  • 原子性: 事务中的操作要么全部执行, 要么都不执行;
  • 可串行化: 并发事务的执行结果, 等价于它们按某一顺序串行执行;
  • 用途: 数据库用事务解决并发操作导致的错误;

只读事务有什么特点?​

  • 定义: 只有读操作的事务;
  • 特点: 不会修改数据库, 因此可以并行执行;
  • 声明:
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 §事务/§只读事务/§脏数据/§隔离层次)