一、事務有四大特性,也即原子性(atomicity),一致性(consistency),隔離性(isolation),永續性(durability)
1、原子性
即不可分割,事務要麼全部被執行,要麼全部不執行。如果事務的所有子事務全部提交成功,則所有的資料庫操作被提交,資料庫狀態發生變化;如果有子事務失敗,則其他子事務的資料庫操作被回滾,即資料庫回到事務執行前的狀態,不會發生狀態轉換
2、一致性
事務的執行使得資料庫從一種正確狀態轉換成另外一種正確狀態
3、隔離性
在事務正確提交之前,不允許把事務對該資料的改變提供給任何其他事務,即在事務正確提交之前,它可能的結果不應該顯示給其他事務
4、永續性
事務正確提交之後,其結果將永遠儲存在資料庫之中,即使在事務提交之後有了其他故障,事務的處理結果也會得到儲存
二、併發下事務可能出現的問題
1)幻讀:事務1讀取記錄時事務2增加了記錄並提交,事務1再次讀取時可以看到事務2新增的記錄;
2)不可重複讀取:事務1讀取記錄時,事務2更新了記錄並提交,事務1再次讀取時可以看到事務2修改後的記錄;
3)髒讀:事務1更新了記錄,但沒有提交,事務2讀取了更新後的行,然後事務t1回滾,現在t2讀取無效。
三、spring事務的五個隔離級別:
1)isolation_default
這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.另外四個與jdbc的隔離級別相對應;
在mysql資料庫中,支援上面四種隔離級別,預設的為repeatable read (可重複讀);而在oracle資料庫中,只支援serializable (序列化)級別和read committed (讀已提交)這兩種級別,其中預設的為read committed級別
2)isolation_read_uncommitted 讀未提交
這是事務最低的隔離級別,它充許別外乙個事務可以看到這個事務未提交的資料。
這種隔離級別會產生髒讀,不可重複讀和幻像讀。
3)isolation_read_committed 讀已提交
保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料。
這種事務隔離級別可以避免髒讀出現,但是可能會出現不可重複讀和幻像讀。
4)isolation_repeatable_read 可重複讀
這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。
它除了保證乙個事務不能讀取另乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。
5)isolation_serializable
這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。
除了防止髒讀,不可重複讀外,還避免了幻像讀。
四、spring七個事務傳播屬性
1)propagation_required – 支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇。
2)propagation_supports – 支援當前事務,如果當前沒有事務,就以非事務方式執行。
3)propagation_mandatory – 支援當前事務,如果當前沒有事務,就丟擲異常。
4)propagation_requires_new – 新建事務,如果當前存在事務,把當前事務掛起。
5)propagation_not_supported – 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
6)propagation_never – 以非事務方式執行,如果當前存在事務,則丟擲異常。
7)propagation_nested – 如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與propagation_required類似的操作。
spring事務隔離級別
在spring中定義了5中不同的事務隔離級別 1.isolation default 一般情況下使用這種配置既可 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。2.isolation read uncommitted 4 p l.i f k...
Spring 事務隔離級別
資料庫事務的隔離級別有4種,由低到高分為為read uncomitted,read comitted,repeatable read serializable,而且,在事務的併發操作中可能會出現髒讀,不可重複度,虛讀 幻讀 髒讀 read uncomitted 什麼都防不住 乙個事務讀到另外乙個事務...
Spring事務隔離級別
事務操作可能出現的問題 更新丟失 lost update 當系統允許兩個事務同時更新同一資料時,發生更新丟失。髒讀 dirty read 當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。非重複讀 nonrepeatable read 第一次讀 得到乙個結果 再讀,換了乙個結果 幻像 phanto...