資料庫事務

2022-02-09 03:33:12 字數 2141 閱讀 1621

四大特性:acid

1、原子性(atomicity,或稱 不可分割性):一批操作,要麼全部成功,要麼全部不成功。

2、一致性(consistency):結果唯

一、精確、無髒資料。

3、隔離性(los): 多個事務併發的時候,保證各個事務之間的隔離性。

4、永續性(durability): 將資料存入硬碟。

事務的隔離性:

隔離級別

髒讀取不可重複讀

幻讀讀未提交(read  uncommitted)

yesyes

yes讀提交(read committed)

noyes

yes可重複讀(repeatable read)

nono

yes序列化(serializable)

nono

no髒讀取:乙個事務在執行過程中,讀取了另外乙個事務未提交的資料。

不可重複讀:乙個事務中多次查詢結果不唯一。首次查詢與再次查詢間隔間,另外乙個事務提交,導致的結果不一致。(修改或刪除)

幻讀:(資料的新增)

事務a,執行查詢操作,得到 3 條記錄。

事務b,執行查詢操作,得到 3 條記錄。

事務b,執行 insert 操作,將一條記錄插入表中,並提交事務。

事務a,執行查詢操作,由於隔離性(快照讀取),結果依然為 3 條記錄。當事務a,執行 insert 操作時,發現表中已經存在id = 4的記錄了,就跟產生了幻覺一樣。

mysql innodb mvcc (multiversion concurrency control ,多版本控制)

它使得大部分支援行鎖的事務引擎,不再單純的使用行鎖來進行資料庫的併發控制,取而代之的是把資料庫的行鎖與行的多個版本結合起來,只需要很小的開銷,就可以實現非鎖定讀,從而大大提高資料庫系統的併發效能。

讀鎖:也叫共享鎖、s鎖,若事務t對資料物件a加上s鎖,則事務t可以讀a但不能修改a,其他事務只能再對a加s鎖,而不能加x鎖,直到t釋放a上的s 鎖。這保證了其他事務可以讀a,但在t釋放a上的s鎖之前不能對a做任何修改。

寫鎖:又稱排他鎖、x鎖。若事務t對資料物件a加上x鎖,事務t可以讀a也可以修改a,其他事務不能再對a加任何鎖,直到t釋放a上的鎖。這保證了其他事務在t釋放a上的鎖之前不能再讀取和修改a。

表鎖:操作物件是資料表。mysql大多數鎖策略都支援(常見mysql innodb),是系統開銷最低但併發性最低的乙個鎖策略。事務t對整個表加讀鎖,則其他事務可讀不可寫,若加寫鎖,則其他事務增刪改都不行。

行級鎖:操作物件是資料表中的一行。是mvcc技術用的比較多的,但在myisam用不了,行級鎖用mysql的儲存引擎實現而不是mysql伺服器。行級鎖對系統開銷較大,處理高併發不夠好。innodb mvcc 比行鎖效能好。

innodb的mvcc,是通過在每行記錄後面儲存兩個隱藏的列來實現的,這兩個列,分別儲存了這個行的建立時間,乙個儲存的是行的刪除時間。這裡儲存的並不是實際的時間值,而是系統版本號(可以理解為事務的id),每開始乙個新的事務,系統版本號就會自動遞增,事務開始時刻的系統版本號會作為事務的id。

select   

innodb會根據以下兩個條件檢查每行記錄::

a.innodb只會查詢版本早於當前事務版本的資料行(也就是,行的系統版本號小於或等於事務的系統版本號),這樣可以確保事務讀取的行,要麼是在事務開始前已經存在的,要麼是事務自身插入或者修改過的.。

b.行的刪除版本要麼未定義,要麼大於當前事務版本號,這可以確保事務讀取到的行,在事務開始之前未被刪除.。

只有a,b同時滿足的記錄,才能返回作為查詢結果。

update

innodb會為刪除的每一行儲存當前系統的版本號(事務的id)作為刪除標識.。

innodb執行update,實際上是新插入了一行記錄,並儲存其建立時間為當前事務的id,同時儲存當前事務id到要update的行的刪除時間。

delete,insert 可以根據上面的結論,進行推導。

oracle 中解決幻讀使用的技術:undo (待補充。。。)

注意:事務的隔離級別和資料庫併發性是成反比的,隔離級別越高,併發性越低。

資料庫事務

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...

資料庫 事務

資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...

資料庫事務

這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...