四大特性:
四大特性
含義原子性
乙個事務要麼成功,要麼失敗
一致性
乙個事務執行之前跟執行之後狀態保持一致
例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 資料庫在事務執行前後都保持一致性狀態...