溫故知新之 資料庫的事務 隔離級別 鎖

2021-09-07 08:39:11 字數 889 閱讀 7435

首先,為什麼需要事務?

最典型的例子是銀行轉賬,因為不是原子性的操作(乙個賬號扣款,另乙個賬號收款),所以存在出現問題的可能,如這邊扣款完畢,然後程式掛掉,收款方又沒收到,這錢就蒸發了。

為了保證流程按照我們預計的執行,所以出現了事務的概念。

事務的特性:acid。

原子性、一致性、隔離性、永續性。

注意,這是在乙個事務操作中表現出來的特性,由技術手段來完成,而不是資料庫真的有這些特性。

隔離級別是什麼?

理論上,事務之間只要先後有序(乙個事務執行完再執行另乙個,也叫序列化,serializable),就不會發生資料問題。

但是,這樣顯然不合適,因為先後有序會導致事務的阻塞,高併發訪問時會導致很長時間沒有響應。

為了解決這個問題,又出現了事務的隔離級別的概念。一般有四個級別,見下表。

隔離級別

髒讀

丟失更新

不可重複讀

幻讀

未提交讀:read uncommited是是

是是已提交讀:read commited否是

是是可重複讀:repeatable read否否

否是可序列讀:serializable否否

否否表來自:

鎖又是什麼?

鎖是底層的控制機制,事務通過鎖來控制隔離級別。

實際開發中很少直接操作鎖,更多的是利用資料庫提供的事務的四個隔離級別。

可以認為隔離級別是鎖的乙個整體打包解決方案(引用了參考鏈結中的原話)。

參考:

資料庫事務隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...

資料庫事務隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...

資料庫事務隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable 這四個級別可以逐個解決髒讀 不可重複讀 幻讀 這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted re...