Mysql是如何保证原子性和持久性的总结
1、Mysql怎么保證原子性的?
OK,是利用Innodb的undo log。
undo log名為回滾日志,是實現(xiàn)原子性的關(guān)鍵,當(dāng)事務(wù)回滾時能夠撤銷所有已經(jīng)成功執(zhí)行的sql語句,他需要記錄你要回滾的相應(yīng)日志信息。
例如:
(1)當(dāng)你delete一條數(shù)據(jù)的時候,就需要記錄這條數(shù)據(jù)的信息,回滾的時候,insert這條舊數(shù)據(jù)
(2)當(dāng)你update一條數(shù)據(jù)的時候,就需要記錄之前的舊值,回滾的時候,根據(jù)舊值執(zhí)行update操作
(3)當(dāng)年insert一條數(shù)據(jù)的時候,就需要這條記錄的主鍵,回滾的時候,根據(jù)主鍵執(zhí)行delete操
undo log記錄了這些回滾需要的信息,當(dāng)事務(wù)執(zhí)行失敗或調(diào)用了rollback,導(dǎo)致事務(wù)需要回滾,便可以利用undo log中的信息將數(shù)據(jù)回滾到修改之前的樣子。
2.mysql是如何保證持久性的?
是利用了redo log。Mysql是先把磁盤上的數(shù)據(jù)加載到內(nèi)存中,在內(nèi)存中對數(shù)據(jù)進(jìn)行修改,再刷回磁盤上。如果此時突然宕機(jī),內(nèi)存中的數(shù)據(jù)就會丟失。redo log包括兩部分:一是內(nèi)存中的日志緩沖(redo log buffer),該部分日志是易失性的;二是磁盤上的重做日志文件(redo log file),該部分日志是持久的。innodb通過force log at commit機(jī)制實現(xiàn)事務(wù)的持久性,即在事務(wù)提交的時候,必須先將該事務(wù)的所有事務(wù)日志寫入到磁盤上的redo log file和undo log file中進(jìn)行持久化。也就是說提交了兩個日志文件。
總結(jié)
以上是生活随笔為你收集整理的Mysql是如何保证原子性和持久性的总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不允许使用java方式启动_细品 Jav
- 下一篇: 怎么实现ghostscript沙箱绕过命