事務處理中的併發控制:
1.
併發操作
資料庫是乙個共享資源,允許多個使用者程式並行地訪問資料庫,所以當多個使用者併發地訪問同一資料,就可能出現資料的不一致性。例如:假設有兩個事務
t1 和
t2 ,它們都需要讀出並修改資料
a ,其執**況如下所示:
執行順序 1
2
3
4
5
6
事務t1
讀aa=a+10
提交a提交a
事務t2
讀aa :
=a-30
t1 工作區中
a 的值 30
40
40
40
40
40
t2 工作區中
a 的值 30
30
30
0
0
資料庫中
a 的值 30
30
30
40
40
0
2.
導致結果
正常情況下最後資料庫中
a 的值應該是
10 ,可結果確是0 。
3.
產生原因
由於事務的併發操作,當
t1 讀取
a 並準備修改時,
t2 也讀取了
a ,這樣
t1 和
t2 讀取的都是
30 ,當
t1 在第四步將修改後的結果寫回資料庫,
t2 接著在第
6 步也將它的修改結果寫回資料庫中,這樣就將
t1 的修改結果給覆蓋了。
4.
解決辦法——加鎖
在事務要對資料庫進行操作前,禁止其他事務再對該資料進行操作。
執行順序
t1 :
lock a
read a
a=a+10
write a
unlock a
t2 :
lock a
read a
a=a-30
write a
unlock a
這樣最後資料庫中a的值就是10而不是0。
【注意】通過採用資料庫的加鎖機制便可避免由於事務併發而導致的錯誤,但是對事務加鎖並不能解決所有的併發操作,也不是併發控制的唯一辦法。
MySQL 加鎖控制併發的方法
前言 鎖總體可以分為樂觀鎖和悲觀鎖,簡單說,樂觀鎖用版本號控制,悲觀鎖用鎖控制。下面是待會要用來測試的資料12 3456 78910 1112 新增乙個user表 create table users id int 11 not null auto increment comment id name...
事務的併發控制
我們知道,當多個執行緒都開啟事務運算元據庫中的資料時,資料庫系統要能進行隔離操作以保證各個執行緒獲取資料的準確性。也就是說,事務的隔離性主要用於解決事務的併發安全問題 事務隔離級別 髒讀不可重複讀 幻讀讀未提交 read uncommitted 是是 是不可重複讀 read committed 否是...
事務併發控制(一)
1 事務的概念 事務是使用者定義的一組資料庫操作序列。事務具有acid特性 原子性 atomicity 一致性 consistency 隔離性 isolation 和持續性 durability 原子性指 事務包含的所有操作要麼全部被執行,要麼都不執行 一致性指 事務的執行結果必須使資料庫從乙個一致...