mysql 事务理解

208 阅读1分钟

mysql 事务:

ACID

  • 原子性 - atomic
  • 一致性 - consist
  • 隔离性 - isolation
  • 持久性 - duration

隔离级别

  • read uncommited
  • read committed - 解决了未提交读
  • repeatable read - 通过MVVC解决了当读事务开始时,只读取当前事务id之前的表记录(快照读)
  • seralizable - 解决了幻读

幻读:

出现场景

  1. 事务A,查询id=1,不存在;
  2. 事务B,插入一条id=1;
  3. 事务A,插入id=1失败

原因:

由于MVVC的控制,事务A只能读取到事务A的版本id之前的记录,导致判空失败;

解决

  1. seralizable读写都串型执行

  2. 第一步查询操作改成查询最新表记录(当前读current read),而不是默认的当时事务记录(快照读 snapshot read); select * from t1 where id = 1 for update; 即添加next-key行锁