事務併發 併發控制(加鎖)

2021-04-13 10:50:03 字數 1431 閱讀 9680

事務處理中的併發控制:

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 原子性指 事務包含的所有操作要麼全部被執行,要麼都不執行 一致性指 事務的執行結果必須使資料庫從乙個一致...