事务隔离性和产生的数据问题笔记
事务之间由于隔离性的原因,会造成,也只有3种数据影响
1. 两个事务之间的相互影响
完整版:
以上2个截图来自 Transaction Processing Concepts and Techniques
2. 3种数据问题及其原因
问题类型 | 原因 | 事务隔离级别 |
---|---|---|
更新丢失(Lost Update) | T1写的数据被T2覆盖掉了 | 任何级别都不会出现这种情况,但在实际应用中由于多个事务串联/其他,会导致这种情况 |
脏读(Dirty Read) | T1读到T2未提交的数据 | Read-Uncommitted |
不可重复读(Unrepeatable Read) | T1读到T2提交的数据,但是读了2次发现不同 | Read-Committed |
3. 总结
以上仅仅只是在2个事务层面去分析造成的数据问题, 但已经是完备的了, 囊括了所有可能出现的情况, 笔者以自己的理解做如下整理:
- 要出现上面的问题,必须是有一个写事务
- 要出现上面的问题,肯定是数据时间跨度上出现了重叠
- 脏读和不可重复读二者在于是否读到的数据是提交的
- 就上面3中问题,有2种是以读为重点的
ref:
- Transaction Processing Concepts and Techniques
- MySQL技术内幕 InnoDB存储引擎 第2版 (6.5 锁问题)
网友评论