sql server 并发控制简单介绍
并发控制概述
丢失修改(lost update)
当事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1修改被丢失。
不可重复读(non-repeatable read)
事务T1读取数据后,事务T2执行了更新操作,使T1无法再现前一次读取结果。具体包括三种情况:
1.事务T1读取某一数据后,事务T2对其进行了修改,当事务T1再次读该数据时,得到与之前不同的值。(在一个窗口中修改了表中的某个数据后,另一个窗口中的值也改变了)
2.当事务T1按一定条件读取某些数据后,事务T2删除了其中的部分记录,当T1再次按相同条件读取时,某些数据消失了。
3.当事务T1按照以一定条件读取某些数据后,事务T2插入了一些记录,当T1再次按照相同条件读取时,发现多了一些数据。
读“脏”数据(dirty read)(一窗口修改了数据后并执行,二窗口读到了修改后的值,此时一窗口修改事务被撤销,二窗口仍读到的是更新后的值)
事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销了,这时被T1修改过的数据恢复了原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据.
注:产生数据不一致的主要原因是并发操作破坏了事务的隔离性