mysql 事务:
ACID
- 原子性 - atomic
- 一致性 - consist
- 隔离性 - isolation
- 持久性 - duration
隔离级别
- read uncommited
- read committed - 解决了未提交读
- repeatable read - 通过MVVC解决了当读事务开始时,只读取当前事务id之前的表记录(快照读)
- seralizable - 解决了幻读
幻读:
出现场景
- 事务A,查询id=1,不存在;
- 事务B,插入一条id=1;
- 事务A,插入id=1失败
原因:
由于MVVC的控制,事务A只能读取到事务A的版本id之前的记录,导致判空失败;
解决
-
seralizable读写都串型执行
-
第一步查询操作改成查询最新表记录(当前读current read),而不是默认的当时事务记录(快照读 snapshot read); select * from t1 where id = 1 for update; 即添加next-key行锁