在MySQL事務處理中,持久性是非常重要的一個概念。事務的一個主要目的是確保在事務完成之前所做出的修改是可靠的,這就需要保證持久性。
持久性指的是對于一組在事務中執行的操作,如果事務成功提交,那么這些操作所做出的修改必須永久保存在數據庫中。這意味著如果系統在提交成功之前崩潰,那么這些修改也必須被撤銷,回到事務開始之前的狀態。
MySQL通過將事務日志持久保存在磁盤上來實現持久性。在事務提交之前,所做出的修改會被寫入事務日志中,而不會直接寫入到數據文件中。只有在事務提交成功之后,這些修改才會被寫入到真正的數據文件中。
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;
在上面的例子中,事務會查詢賬戶1的余額,然后將其減少100;接著再查詢賬戶2的余額,將其增加100。只有當這些操作都成功執行,事務才會提交,這時才會將所做出的修改寫入到數據文件中。如果在這個過程中系統崩潰,那么數據文件的內容并不會受到任何改變,因為修改只存在于事務日志中。