在MySQL事務(wù)處理中,持久性是非常重要的一個(gè)概念。事務(wù)的一個(gè)主要目的是確保在事務(wù)完成之前所做出的修改是可靠的,這就需要保證持久性。
持久性指的是對(duì)于一組在事務(wù)中執(zhí)行的操作,如果事務(wù)成功提交,那么這些操作所做出的修改必須永久保存在數(shù)據(jù)庫中。這意味著如果系統(tǒng)在提交成功之前崩潰,那么這些修改也必須被撤銷,回到事務(wù)開始之前的狀態(tài)。
MySQL通過將事務(wù)日志持久保存在磁盤上來實(shí)現(xiàn)持久性。在事務(wù)提交之前,所做出的修改會(huì)被寫入事務(wù)日志中,而不會(huì)直接寫入到數(shù)據(jù)文件中。只有在事務(wù)提交成功之后,這些修改才會(huì)被寫入到真正的數(shù)據(jù)文件中。
START TRANSACTION; SELECT balance FROM accounts WHERE id = 1; UPDATE accounts SET balance = balance - 100 WHERE id = 1; SELECT balance FROM accounts WHERE id = 2; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
在上面的例子中,事務(wù)會(huì)查詢賬戶1的余額,然后將其減少100;接著再查詢賬戶2的余額,將其增加100。只有當(dāng)這些操作都成功執(zhí)行,事務(wù)才會(huì)提交,這時(shí)才會(huì)將所做出的修改寫入到數(shù)據(jù)文件中。如果在這個(gè)過程中系統(tǒng)崩潰,那么數(shù)據(jù)文件的內(nèi)容并不會(huì)受到任何改變,因?yàn)樾薷闹淮嬖谟谑聞?wù)日志中。