事務隔離
事務隔離
1. 什麼是事務
事務要保證一組資料庫操作,要麼全成功,要麼全失敗。MySQL MyISAM引擎不支援事務,InnoDB支援。
2. 事務的特性
- A Atomicity 原子性
- C Consistency 一致性
- I Isolation 隔離性
- D Durability 永續性
3. 多個事務同時執行的問題
- 髒讀
- 不可重複讀
- 幻讀
4. 隔離級別
隔離的越嚴實,效率越低,因此要找一個平衡點。
SQL的隔離級別有:
- 讀未提交 一個事務沒有提交,它所做的變更就能被別的事務看到。
- 讀提交 一個事務提交後,它做的變更才會被其他事務看到。
- 可重複讀 一個事務執行過程中看到的資料跟事務啟動時看到的資料一樣。
- 序列化 對於同一行記錄,寫會加寫鎖,讀會加讀鎖,出現衝突時,後面的事務必須等待前面的事務。
5. 隔離級別的實現
隔離級別實現上,資料庫裡會建立一個檢視,訪問的時候以檢視的邏輯結果為準。
- 可重複讀, 這個檢視是啟動時建立的,整個事務存在期間都用好這個檢視。
- 讀提交,整個檢視是每個SQL語句開始執行的時候建立的,執行的時候會看到記錄上的值。
- 讀未提交,沒有檢視,直接返回記錄上的最新值。
- 序列化,隔離級別是直接枷鎖的方式,避免並行訪問。
6. 預設隔離級別
Oracle資料庫的預設隔離級別是讀提交。
7. 事務隔離的實現
在MySQL中,每條記錄在更新的時候會同時記錄一條回滾操作,上一個狀態的值可以通過當前值進行回滾得到。
當前值為4, 不同時刻啟動的事務會看到不同的read-view。
8.MVCC
同一條記錄可以在系統中有多個版本,這就是資料庫的多版本併發控制。
9.什麼時候會刪除回滾日誌
當沒有事務用到回滾日誌的時候,回滾日誌會刪除,也就是系統裡沒有比回滾日誌更早的read-view的時候會刪除日誌。
10.事務的啟動方式
- 顯式啟動 begin start transaction commit rollback
- set sutocommit=0
推薦顯式啟動。
相關文章
- MySQL 事務隔離MySql
- MySQL事務隔離MySql
- 事務隔離(二):基於加鎖方式的事務隔離原理
- SqlServer事務詳解(事務隔離性和隔離級別詳解)SQLServer
- [Mysql]事務/隔離級別MySql
- MySQL事務隔離級別MySql
- 4.MySQL--事務隔離MySql
- 事務、特性、隔離級別
- MySQL 事務隔離級別MySql
- PostgreSQL事務隔離級別SQL
- ACID之I:事務隔離
- 理解MySQL事務隔離級別MySql
- 事務四種隔離級別
- MySQL 入門(3):事務隔離MySql
- mysql 事務,鎖,隔離機制MySql
- MySQL的事務隔離級別MySql
- MySQL事務的隔離級別MySql
- 資料庫事務與事務的隔離級別資料庫
- 事務的隔離級別與MVCCMVC
- mysql如何修改事務隔離級別MySql
- 啥是 MySQL 事務隔離級別?MySql
- 深入淺出MYSQL的事務隔離MySql
- 事務系統的隔離級別
- 理解mysql的事務隔離級別MySql
- 事務的四種隔離級別
- 事務ACID特性與隔離級別
- mysql事務隔離級別和鎖MySql
- Mysql鎖與事務隔離級別MySql
- Mysql 四種事務隔離級別MySql
- MySQL事務隔離級別和MVCCMySqlMVC
- 什麼是事務、事務特性、事務隔離級別、spring事務傳播特性?Spring
- Spring面試題--(隔離、事務、Aop/oop)Spring面試題OOP
- MySQL 事務隔離級別實現原理MySql
- 事務基礎特性及隔離級別
- (轉)事務的四種隔離級別
- CYmysql事務隔離級別詳情dbzMySql
- [20200512]oracle的事務隔離級別.txtOracle
- MySQL 的四種事務隔離級別MySql