事務隔離級別

2021-10-07 21:28:29 字數 845 閱讀 7236

同一應用程式中多個事務或不同應用程式中多個事務「併發」執行時,可能會出現如下幾類問題:

髒讀(dirty read):已知有a和b兩個併發事務,b讀取了a已更新但為提交的資料,之後a回滾事務,b讀取的資料就是髒資料。

不可重複讀(non-repeatable read):已知有a和b兩個併發事務,a多次讀取同一資料,b在a讀取資料的過程中對資料做了修改並提交,導致a多次讀取同一資料時結果不一致。若在此前提下,a多次讀取同一資料的結果相同,則為重複讀。

幻讀(phantom read):已知有a和b兩個併發事務,a多次讀取同乙個表,b在a讀取的過程中刪除或插入了一些資料,導致a多次讀取同一表時缺少或多出了幾行。

注意不可重複讀側重於修改資料,而幻讀側重於刪除或新增資料。

根據實際需求設定資料庫的事務隔離級別可以解決以上問題,資料庫事務隔離級別由低到高為read uncommitted、read committed、repeatable read、serializable等四種。mysql資料庫支援上面四種事務隔離級別,預設為repeatable read。 注意read committed鎖定了相應行,serializable鎖定了整張表。

(√ 代表可能會出現,× 代表不會出現) 

事務隔離級別

髒讀不可重複讀

幻讀read uncommitted(讀未提交)√√

√read committed(讀已提交)×√

√repeatable read(重複讀)××

√serializable(序列化)××

×1、檢視:登入

mysql資料庫後執行命令select @@global.tx_isolation,@@tx_isolation;

2、修改:

事務隔離級別

1 serializable 最嚴格的spring事務隔離級別,事務序列執行,資源消耗最大 3 read committed 大多數主流資料庫的預設spring事務隔離等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了 髒讀取 該級別適用於大多數系統。4 read uncommi...

事務隔離級別

四種隔離級別 隔離級別 髒 讀不可重複讀取 幻 像讀操作未提交 read uncommitted 是是 是讀操作已提交 read committed 否是 是可重複讀 repeatable read 否否 是快照否否 否可序列讀 serializable 否否 否 sql server 還支援使用行...

事務隔離級別

需要防止的現象和事務隔離級別 ansi iso sql 標準 sql92 定義了四種事務隔離級別 transaction isolation level 這四種隔離級別所能提供的事務處理能力各不相同。這些事務隔離級別是針對三種現象定義的,在併發事務執行時,需要阻止這三種現象 中的一種或多種發生。三種...