Mysql 事務和鎖

2021-09-25 12:14:13 字數 1817 閱讀 2327

是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成為事務,必須滿足所謂的acid(原子性、一致性、隔離性和永續性)屬性。事務是資料庫執行中的乙個邏輯工作單位,由dbms中的事務管理子系統負責事務的處理。

舉個例子加深一下理解:同乙個銀行轉賬,a轉1000塊錢給b,這裡存在兩個操作,乙個是a賬戶扣款1000元,兩乙個操作是b賬戶增加1000元,兩者就構成了轉賬這個事務。

最後思考一下,怎麼樣會出現a賬戶扣款1000元,b賬戶金額不變?如果你是把兩個操作放在乙個事務裡面,並且是資料庫提供的內在事務支援,那就不會有問題,但是開發人員把兩個操作放在兩個事務裡面,而第二個事務失敗就會出現中間狀態。現實中自己實現的分布式事務處理不當也會出現中間狀態,這並不是事務的錯,事務本身就是規定不會出現中間狀態,是事務實現者做出來的方案有問題。

我們從另外乙個方向來說說,如果不對事務進行併發控制,我們看看資料庫併發操作是會有那些異常情形,有些使我們可以接受的,有些是不能接受的,注意這裡的異常就是特定語境下的,並不一定就是錯誤什麼的。假設有乙個order表,有個字段叫count,作為計數用,當前值為100

看到上面提到的幾種問題,你可能會想,我擦,這麼多坑怎麼辦啊。其實上面幾種情況並不是一定都要避免的,具體看你的業務要求,包括你資料庫的負載都會影響你的決定。不知道大家發現沒有,上面各種異常情況都是多個事務之間相互影響造成的,這說明兩個事務之間需要某種方式將他們從某種程度上分開,降低直至避免相互影響。這時候資料庫事務隔離級別就粉墨登場了,而資料庫的隔離級別實現一般是通過資料庫鎖實現的。

下面是各種隔離級別對各異常的控制能力:

級別\異常

第一類更新丟失

髒讀不可重複讀

第二類丟失更新

幻讀讀未提交yy

yyy讀已提交nn

yyy可重複讀nn

nny序列化nn

nnn一般可以分為兩類,乙個是悲觀鎖,乙個是樂觀鎖,悲觀鎖一般就是我們通常說的資料庫鎖機制,樂觀鎖一般是指使用者自己實現的一種鎖機制,比如hibernate實現的樂觀鎖甚至程式語言也有樂觀鎖的思想的應用。

悲觀鎖:顧名思義,就是很悲觀,它對於資料被外界修改持保守態度,認為資料隨時會修改,所以整個資料處理中需要將資料加鎖。悲觀鎖一般都是依靠關聯式資料庫提供的鎖機制,事實上關聯式資料庫中的行鎖,表鎖不論是讀寫鎖都是悲觀鎖。

悲觀鎖按照使用性質劃分:

悲觀鎖按照作用範圍劃分:

樂觀鎖:顧名思義,就是很樂觀,每次自己運算元據的時候認為沒有人回來修改它,所以不去加鎖,但是在更新的時候會去判斷在此期間資料有沒有被修改,需要使用者自己去實現。既然都有資料庫提供的悲觀鎖可以方便使用為什麼要使用樂觀鎖呢?對於讀操作遠多於寫操作的時候,大多數都是讀取,這時候乙個更新操作加鎖會阻塞所有讀取,降低了吞吐量。最後還要釋放鎖,鎖是需要一些開銷的,我們只要想辦法解決極少量的更新操作的同步問題。換句話說,如果是讀寫比例差距不是非常大或者你的系統沒有響應不及時,吞吐量瓶頸問題,那就不要去使用樂觀鎖,它增加了複雜度,也帶來了額外的風險。

樂觀鎖實現方式:

檢視資料庫版本:select version();

檢視隔離級別:select @@session.tx_isolation;

修改隔離級別:set @@session.tx_isolation=引數;

可選引數有:read-uncommitted, read-committed, repeatable-read, serializable

開啟事務:start transaction;

提交:commit;

回滾:rollback;

mysql 事務和鎖

事務是dbms得執行單位 開啟事務 set autocommit 0 取消自動提交 或begin 手動開啟乙個事務 提交乙個事務 commit 回滾乙個事務 rollback 在mysql的innodb 引擎中,預設每個操作 insert,update,select for update lock ...

MySQL 事務和鎖

和其他資料庫相比,mysql的鎖機制比較假單,不同的引擎支援不同的鎖機制。myisam和memory使用表級鎖,bdb使用頁面鎖和表級鎖 innodb預設支援行級鎖,也支援表級鎖。myisam表鎖有兩中,乙個是都鎖,乙個是寫鎖,相容性如下 模式讀鎖 寫鎖讀鎖 相容不相容 寫鎖不相容 不相容 可見my...

mysql事務和鎖

參考文章 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程 錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。2 一致性 consistency 事...