当前位置: 首页 > 图灵资讯 > 技术篇> 并发事务的问题

并发事务的问题

来源:图灵教育
时间:2023-07-06 15:40:52

多个事务并发运行,通常操作相同的数据来完成各自的任务(多个用户操作相同的数据)。虽然需要并发,但可能会导致以下问题。

脏读(Dirty read):当一个事务访问数据并修改数据,而该修改尚未提交到数据库时,另一个事务访问数据并使用数据。由于该数据尚未提交,另一个事务读取的数据为“脏数据”,基于“脏数据”的操作可能不正确。

丢失修改(Lost to modify):这意味着当一个事务读取一个数据时,另一个事务也访问了数据,所以在第一个事务中修改数据后,第二个事务也修改了数据。因此,第一次事务中的修改结果被丢失,因此被称为丢失修改。例如:事务1读取表中的数据A=20,事务2读取A=20,事务1修改A=20=A-1.事务2也修改了A=A-1.最终结果a=19,事务1修改丢失。

不可重复读(Unrepeatableread):这意味着在一个事务中多次阅读相同的数据。在事务结束前,另一个事务也访问数据。然后,在第一个事务中的两次阅读数据之间,由于第二个事务的修改,第一个事务中的两次阅读数据可能会有所不同。这发生在一个事务中两次阅读的数据是不同的,因此被称为不可重复阅读。

幻读(Phantom read):幻读类似于不可重复阅读。它发生在一个事务(T1)读取几行数据,然后当另一个并发事务(T2)插入一些数据时,在随后的查询中,第一个事务(T1)会发现更多不存在的记录,就像幻觉一样,所以叫幻读。

不可重复阅读和幻读的区别:不可重复阅读的重点是修改。例如,如果您多次读取一个记录,并且发现某些列的值已被修改,则幻读的重点是添加或删除。例如,如果您多次读取一个记录,您会发现记录增加或减少。

上一篇:

事务隔离级别

下一篇:

MyISAM和InnoDB区别