同一應用程式中多個事務或不同應用程式中多個事務「併發」執行時,可能會出現如下幾類問題:
髒讀(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 這四種隔離級別所能提供的事務處理能力各不相同。這些事務隔離級別是針對三種現象定義的,在併發事務執行時,需要阻止這三種現象 中的一種或多種發生。三種...