事務(wù)
由一系列數(shù)據(jù)庫操作組成的一個完整的邏輯過程,的是滿足ACID特性的一組操作,可以通過Commit提交一個事務(wù),也可以使用Rollback進(jìn)行回滾
- 原子性(Atomicity): 事務(wù)中所有操作要么全部成功,要么全部失敗
- 一致性(Consistency): 事務(wù)從一種一致的狀態(tài)到另一種一致的狀態(tài),不會破壞系統(tǒng)的完整性
- 隔離性(Isolation): 并發(fā)事務(wù)之間相互影響的程度
- 持久性(Durability): 事務(wù)所有成功的操作對系統(tǒng)的影響是永久存在的
并發(fā)一致性問題
- 臟讀: 事務(wù)A讀取事務(wù)B修改后的記錄, 之后事務(wù)B失敗rollback之后事務(wù)A讀到了錯誤的數(shù)據(jù)
- 不可重復(fù)讀: 事務(wù)A讀取某條數(shù)據(jù)之后事務(wù)B成功修改了該記錄,A再次讀取同條記錄前后讀取不一致
- 幻影讀: 事務(wù)A根據(jù)某種檢索條件讀取了若干條記錄,事務(wù)B插入一條記錄,A再次相同檢索條件讀取了若干條記錄前后不一致
鎖類型
- 共享鎖(讀鎖, S鎖): 事務(wù)對數(shù)據(jù)加共享鎖, 事務(wù)對數(shù)據(jù)只可以讀取不可以更新, 其他事務(wù)只可以加共享鎖, 不可以加互斥鎖
- 互斥鎖(寫鎖, X鎖): 事務(wù)對數(shù)據(jù)加互斥鎖, 事務(wù)對數(shù)據(jù)可以讀取也可以更新, 其他事務(wù)不可以加共享鎖, 也不可以加互斥鎖
- 可以按照鎖的粒度把數(shù)據(jù)庫鎖分為行級鎖(INNODB引擎),表級鎖(MYISAM引擎),頁級鎖(BDB引擎 )栈幸。
隔離級別
- 未提交讀(Uncommit Read): 事務(wù)讀取時對數(shù)據(jù)未加鎖, 更新時對數(shù)據(jù)加行級共享鎖(我覺得這句話有問題, 因為共享鎖是無法修改數(shù)據(jù)的),
- 提交讀(Commit Read): 事務(wù)讀取時對數(shù)據(jù)加行級共享鎖, 一旦讀取完就釋放掉, 更新時對數(shù)據(jù)加行級排它鎖, 直到事務(wù)結(jié)束, 可以避免臟讀
- 可重復(fù)讀(Repeatable Read): 事務(wù)讀取時對數(shù)據(jù)加行級共享鎖, 直到事務(wù)結(jié)束, 更新時對數(shù)據(jù)加行級排它鎖, 直到事務(wù)結(jié)束, 可以避免可重復(fù)讀
MVCC(多版本并發(fā)控制)
在每條記錄后面添加兩個字段記錄添加的創(chuàng)建時間(創(chuàng)建版本號)和刪除時間(刪除版本號), 讀取記錄的時候讀取創(chuàng)建時間小于當(dāng)前, 刪除時間大于當(dāng)前