4. 事務的隔離級別
二、事務的操作
2. 案例演示
1. 模擬生活
生活中往往出現這樣一種場景,一件事情中包含多個任務,只有多個任務同時完成事務才能辦成,否則只要有乙個任務失敗,整件事情失敗。
如公司的運營,所有員工共同配合:
2. 事務的定義
資料庫事務( transaction)是訪問並可能操作各種資料項的乙個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是乙個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部資料庫操作組成。通俗來說事務就是多條dml語句同時成功或者同時失敗。
目標:了解事務的本質,了解事務的工作過程,操作事務以提高資料操作效率這才是事務管理的本質。
注
:只有dml語句才與事務管理有關,其他語句無關。只要進行資料的增、刪、改操作,就要考慮資料的安全性。
3. 事務的特性(acid)
3.1 原子性(atomicity)
所有任務要麼全部成功,要麼全部失敗。說明事務是最小的工作單元,不可再分。如 a給 b 轉賬,不會出現a的錢少了,而b的錢沒有增加的情況。
3.2 一致性(consistency)
事務開始前和結束後,資料的完整性約束沒有被破壞。如轉賬完成後,a減少100,b一定增加100。
3.3 隔離性(isolation)
同一時間,只允許乙個事務請求同一資料。多個事務同時操作時,不同事務之間彼此沒有任何干擾。
3.4 永續性(durability)
事務一旦被提交,對資料的改變就是永久性的。即使資料庫系統遇到故障也不會丟失提交事務的操作。
4. 事務的隔離級別
事務的特性已經確定了,但是資料庫中如果嚴格按照事務的四大特性進行管理的話,資料的操作就會變得非常緩慢且消耗非常多的系統資源,為了保障資料的acid特性的同時提公升資料操作的效率
,資料庫中定義了事務的隔離級別
4.1 讀未提交(read uncommitted)
事務a讀到了事務b未提交的資料,並在該資料基礎上進行操作。
4.2 讀已提交(read committed)
事務a只能讀到事務b已提交的資料。
4.3 可重複讀(repeatable read)
乙個未完成的事務讀取不到其他事務已經提交的資料。如事務a 開啟之後,不管多久,每一次在事務a 中讀取到的資料都是一致的。即使事務b 已經將資料修改,並且提交了,事務a讀取到的資料依舊沒有發生改變。
4.4 序列化/序列化(serializable)
多個事務要排隊,不能併發,乙個事務在操作時,另乙個事務不能操作。
mysql中事務行為預設提交,每執行一條dml語句,就提交一次。
1. 基本語法
1.1 設定隔離級別
1.2 開啟事務
start transaction;
1.3 提交事務commit();
清空事務性活動的日誌檔案,將改變的資料全部徹底持久化到資料庫表中。
提交事務標誌著事務的結束,並且是全部成功
的結束。
1.4 回滾事務
rollback();
清空事務性活動的日誌檔案,將之前所有的dml操作全部撤銷恢復到資料改變之前。
回滾事務標誌著事務的結束,並且是全部失敗
的結束。
2. 案例演示
左:事務a 右:事務b
2.1 讀未提交
2.2 讀已提交
設定隔離級別,需要重連資料庫。
2.3 可重複讀
2.4 序列化
Spring之事務管理
spring事務管理高層抽象主要包括3個介面 1.platformtransactionmanager 事務管理器 實現類 datasourcetransactionmanager 使用spring jdbc或ibatis進行持久化資料時使用 實現類 hibernatetransactionmana...
spring之事務管理
spring對事務的管理,有兩種方式,分別是程式設計式事務和宣告式事務,常用的是宣告式的事務,採用宣告式的事務包括配置檔案的方式和註解的配置方式 1採用配置檔案的方式 1.1類 public class user public class userdao 增加錢 public void addmon...
Spring Framework之事務管理
目錄spring事務管理 參考1 事務是什麼?2 事務的目的是什麼?spring的事務管理底層基於資料庫事務,所以在學習spring事務之前,我們需要先學習資料庫事務。事務的定義 事務是資料庫管理系統執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。來自維基百科 簡單翻譯就是將資料資源進行訪...