事务与锁
→ 返回 MySQL
ACID
| 特性 | 说明 |
|---|---|
| 原子性 | undo log 回滚 |
| 一致性 | 约束 + 业务 |
| 隔离性 | MVCC + 锁 |
| 持久性 | redo log WAL |
隔离级别
| 级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| READ UNCOMMITTED | 可能 | 可能 | 可能 |
| READ COMMITTED | 否 | 可能 | 可能 |
| REPEATABLE READ(默认) | 否 | 否 | 大部分抑制 |
| SERIALIZABLE | 否 | 否 | 否 |
锁
| 锁 | 说明 |
|---|---|
| 行锁 | 索引记录 |
| 间隙锁 | 防幻读(RR) |
| Next-Key Lock | 行锁 + 间隙 |
SELECT * FROM account WHERE id = 1 FOR UPDATE;
SELECT * FROM account WHERE id = 1 LOCK IN SHARE MODE;死锁:InnoDB 回滚其一事务;应用重试。