mysql–事务并发
1.事务并发带来的问题:
- 脏读:读了未提交的事务修改的内容
- 不可重复度 (事务内第一次读和第二次读内容不一致,有另外一个事务对数据做了修改:update或delete)
- 幻读 (事务第二次读的时候多出来一条数据:另外一个事务中间插入了一条数据提交了: 在选定范围内一般是插入了一条数据)
2.innodb引擎对隔离级别的支持:
默认是:可重复读
结论是:隔离级别越高,安全性越高,效率越低
3. 一个示例
- 若隔离级别是“读未提交”, 则V1的值就是2。 这时候事务B虽然还没有提交, 但是结果已经被A看到了。 因此, V2、 V3也都是2。
- 若隔离级别是“读提交”, 则V1是1, V2的值是2。 事务B的更新在提交后才能被A看到。 所以, V3的值也是2。
- 若隔离级别是“可重复读”, 则V1、 V2是1, V3是2。 之所以V2还是1, 遵循的就是这个要求: 事务在执⾏期间看到的数据前后必须是⼀致的。
- 若隔离级别是“串⾏化”, 则在事务B执⾏“将1改成2”的时候, 会被锁住。 直到事务A提交后, 事务B才可以继续执⾏。 所以从A的⻆度看, V1、 V2值是1, V3的值是2。