MySQL如何保證ACID
atomicity原子性
一個事務(wù)是不可分割的最小單元搓逾,事務(wù)中的所有操作要么全部成功笆环,要么全部失敗
如何保證:
通過undo log,undo log記錄了這些回滾需要的信息,當(dāng)事務(wù)執(zhí)行失敗或調(diào)用了rollback,導(dǎo)致事務(wù)需要回滾氛驮,便可以利用undo log中的信息將數(shù)據(jù)回滾到修改之前的樣子。
Consistency一致性
數(shù)據(jù)如果有約束性花沉,那么事務(wù)執(zhí)行前后柳爽,數(shù)據(jù)的約束性還是存在的,并沒有破壞掉碱屁。比如說轉(zhuǎn)賬事務(wù)的前后磷脯,資金的總數(shù)這個約束條件是不會被破壞的
如何保證:
通過undo,回滾機制來保證
Isolation隔離性
多個事務(wù)并行娩脾,一個事務(wù)所做的更改赵誓,不管有沒有提交,在并發(fā)的另一個事務(wù)中都是不可見的柿赊,但最后的效果看起來多個并行的事務(wù)好像是串行一樣
如何保證:
通過給操作的對象加悲觀鎖或者樂觀鎖俩功,MVCC(undo log)來保證,RC不滿足隔離性碰声,RR滿足隔離性
Duration持久性
一旦事務(wù)提交诡蜓,其所做的修改就會永久保存到數(shù)據(jù)庫中。此時即使系統(tǒng)崩潰胰挑,修改的數(shù)據(jù)也不會丟失蔓罚。這個duration指的是mysql服務(wù)器可以重啟的情況下,crash掉之后(比如說只寫到pool buffer中瞻颂,還沒有fsync到磁盤文件中)豺谈,保證duration。而不是物理損壞贡这,物理損壞由備份來負(fù)責(zé)的
如何保證:
是通過redo來保證的茬末。