我们在操作数据库时,可能由于并发问题而引起数据的不一致性(数据冲突)
一、并发操作带来的数据不一致性包括丢失修改、不可重复读、脏读
1.丢失修改
两个事务T1和T2读入同一数据并修改,T1先提交,T2再提交的时候就会覆盖T1提交的结果,导致T1的修改被丢失
2.不可重复读
指事务T1读取数据后,事务T2执行了更新操作,当T1再读的时候发现无法再现前一次读取结果
具体包含3种情况
(1)事务T1读取某一数据后为100,事务T2对其进行了修改改为了200,当事务T1再次读取数据的时候得到与前一次不同的值
(2)事务T1按一定条件从数据库中读取某些数据记录,事务T2删除了其中部分,事务T1再读取的时候发现一些数据神秘消失
(3)事务T1按一定条件从数据库中读取某些数据记录,事务T2增加了一些部分,事务T1再读取的时候发现多了一些数据
后两种也称为幻影现象
3.脏读
指事务T1修改了某一数据并写回到了磁盘中,事务T2读取了该数据,但是T1由于某些原因回滚了操作,则数据库中被修改的值恢复了原值,但是事务T2得到的还是修改过的值,与现在数据库中不一致。
产生上述数据不一致的主要原因是并发操作破坏了事务的隔离性。
那并发来了如何控制?
并发控制机制就是用正确的方式调度并发操作,是一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。另一方面,对数据的应用又是允许某些不一致性,例如有些统计工作设计数据量很大,读到一些脏数据对统计精度没什么影响,这时可以降低对一致性的要求以减少系统开销。
二、并发控制的主要技术有封锁,时间戳,乐观控制法,多版本并发控制
mysql并发控制以及有关锁
最新推荐文章于 2024-09-20 09:11:33 发布
本文探讨了并发操作可能导致的数据不一致性,如丢失修改、不可重复读和脏读,并介绍了并发控制机制的重要性。文章详细阐述了封锁(悲观锁与乐观锁)、时间戳方法和多版本并发控制等技术,特别是对乐观锁和悲观锁进行了深入讲解,包括其应用场景和实现方式。
摘要由CSDN通过智能技术生成