資料庫四大事務(ACID)隔離級別以及各種鎖的詳解

2021-09-26 22:48:50 字數 2275 閱讀 5644

四大特性:

四大特性

含義原子性乙個事務要麼成功,要麼失敗

一致性乙個事務執行之前跟執行之後狀態保持一致

例a和b一共100元,無論中間轉賬多少次、轉多少,最終兩人的錢加一起還是100元

隔離性兩個事務之間互不干擾

例a給b轉賬,不會影響到b給c轉賬,屬於兩個事務

永續性事務一旦提交,永久儲存

隔離級別

隔離級別

可能出現的情況

讀未提交(read uncommitted)最危險,什麼情況都有可能發生:髒讀、不可重複讀、幻讀

讀已提交(read committed)防止髒讀、但可能會出現不可重複讀、幻讀

可重複讀(repeatable read)資料庫預設隔離級別,但也有可能出現幻讀

序列化(serializable)級別最高,相當與單執行緒,全表鎖,一次只能執行乙個事務,相應的執行效率最差

注意:1.隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。

2.對於多數應用程式,可以優先考慮把資料庫系統的隔離級別設為read committed

3.read committed,它能夠避免髒讀取,而且具有較好的併發效能。雖然它會導致不可重複讀、幻讀,但是可以用悲觀鎖和樂觀鎖解決。

1.檢視資料庫隔離級別?

show variables like "%isolation%」;

select @@tx_isolation;

事務隔離之前是如下結果:

variable_name

value

transaction_isolation

repeatable-read

tx_isolation

repeatable-read

2.把隔離級別修改為read committed

全域性修改

setglobal transaction isolation level read committed;

本次事務修改

set session transaction isolation level read committed;

事務修改之後是如下結果:

variable_name

value

transaction_isolation

read-committed

tx_isolation

read-committed

悲觀鎖悲觀鎖:跟表鎖差不多,以訂單為例:當使用者a查詢庫存時,先上鎖,如果不釋放鎖,可能一直造成阻塞,甚至會出現死鎖的情況。

樂觀鎖樂觀鎖:每個使用者更改庫存之前都會先查詢一下,如果和之前查的庫存一樣,就更改庫存,如果不一樣就重新查詢,看購買量是否小於庫存,如果小於庫存,也可以下單。

排它鎖對於update、delete、insert語句句,innodb會⾃自動給涉及資料集加排他鎖(x)

讀鎖、寫鎖

myisam在執⾏查詢語句select前,會⾃自動給涉及的所有表加讀鎖,在執⾏更新操作(update、delete、insert等)前,會⾃動新增寫鎖,這個過程並不不需要使用者⼲預,所以,只會在某些特定的場景下才需要⼿動加鎖。

表鎖開銷⼩,加鎖快;不會出現死鎖;鎖定力度⼤,發⽣鎖衝突概率高,併發度最低

行鎖開銷大,加鎖慢;會出現死鎖;鎖定粒度小,發⽣鎖衝突的概率低,併發度⾼

innodb既支援行鎖也支援表鎖。 myisam只⽀支援表鎖

innodb的行鎖是基於索引的,只有通過索引條件檢索資料才使⽤行級鎖,否則,innodb將使用表鎖。

讀鎖和寫鎖是互斥的,讀寫操作是串⾏。 如果某個程序想要獲取讀鎖,同時另外⼀個程序想要獲取寫鎖。在mysql⾥邊,寫鎖是優先於讀鎖的!

寫鎖和讀鎖優先順序的問題是可以通過引數調節的:max_write_lock_count和low_priority_updates

myisam可以⽀持查詢和插入操作的併發進行。可以通過系統變量concurrent_insert來指定哪種模式,在myisam中它預設是:如果myisam有空洞(即表的中間沒有被刪除的行),myisam允許在乙個程序讀表的同時,另乙個程序從表尾插⼊記錄。 但是innodb儲存引擎是不支援的!

參考:

資料庫事務 四大特性 隔離級別

以下引用自 原子性 atomicity 乙個事務要麼全部執行,要麼不執行 一致性 consistency 事務的執行並不改變資料庫中資料的一致性。例如,完整性約束了a b 10,乙個事務改變了a,那麼b也隨之改變 拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何...

資料庫事務四大特性 隔離級別

要熟悉事務之前我們先了解一下sql 概念 事務就是一組dml語句組成,這些語句在邏輯上存在關聯性,有要麼全部成功,要麼全部失敗。1 原子性 乙個事務是乙個不可分割的整體,為了保證事務的總體目標,事務必須具有原子性,即當資料修改時,要麼全部執行,要麼全部不執行。即,不允許事務部分的完成,避免了只執行這...

資料庫事務四大特性 隔離級別

以轉賬為例 事務是指滿足acid的一組操作,可以通過commit提交乙個事務,也可以使用rollback進行回滾。1.原子性 atomicity 事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾。2.一致性 consisitency 資料庫在事務執行前後都保持一致性狀態...