SQL 标准的隔离级别

数据库不是都串行,而是提供不同的隔离等级,在 性能 vs 隔离 之间取平衡:

  1. Read Uncommitted(读未提交)
  2. Read Committed(读已提交)
  3. Repeatable Read(可重复读)
  4. Serializable(可串行化)

实现方式

数据库不会真的把所有事务串行执行(那性能太差),常见实现方式有:

这样保证隔离性的同时,允许并发。

举个例子

两个事务并发执行:

-- 事务 A
BEGIN;
UPDATE account SET balance = balance - 100 WHERE id = 1;

-- 事务 B
BEGIN;
UPDATE account SET balance = balance - 200 WHERE id = 1;