在Mysql中常用的InndDB是支持并发事务的,也就是能够在同一时间允许多个事务对数据库进行操作,那么问题来了,如果一个事务在写数据,另一个事务要读数据会发生什么;如果一个事务在写数据,另一个事务也要写又会发生什么。具体来说,这就有可能产生脏读、不可重复读和幻读。
事务是逻辑上的一组操作,要么全部执行,要么全部不执行
一个事务读取到了另一个未提交事务修改的数据。这可能导致读取到的数据是无效或错误的,因为那个未提交的事务可能最终会回滚或修改。
例如,事务 A 修改了一条数据但未提交,此时事务 B 读取了这条被修改的数据。如果事务 A 回滚,那么事务 B 读取到的数据就是脏数据。
事务B读取了事务A修改后的数据,但事务A后面回滚,数据回到了修改前,此时事务B手里的数据还是之前的数据,也就是脏数据。
一个事务在执行过程中多次读取同一数据,但是每次读取的结果不一致。这是因为在这个事务执行期间,有其他事务修改了该数据并提交。
比如,事务 A 读取某条数据,事务 B 随后修改并提交了该数据,当事务 A 再次读取时得到了不同的结果。两次读取的结果不一致,因此称为不可重复读。
一个事务在执行过程中,按照相同的条件进行查询,两次得到的结果集行数不同。这通常是因为在事务执行期间,有其他事务插入或删除了满足条件的数据。
例如,事务 A 按照某个条件查询得到结果集,事务 B 插入了一些符合该条件的数据并提交,当事务 A 再次按照相同条件查询时,结果集的行数增多了,就好像出现了“幻影”的数据。
这里我们有个学生表,初始时有8条数据:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。