異常時MySQL 事務回滾
您希望確保事務中的所有MySQL 命令都成功執行或整個事務回滾如果發生任何錯誤。一種常見的方法涉及使用 try/catch 區塊或具有錯誤處理功能的預存程序。然而,更通用的選擇是利用 MySQL 中的 DECLARE ... HANDLER 語法。
DECLARE ... HANDLER 語法可讓您定義在發生指定 SQL 異常時執行的處理程序。透過利用此功能,您可以將 MySQL 設定為在遇到任何錯誤時自動回滾交易。
實作方法如下:
DELIMITER $$ CREATE PROCEDURE `sp_fail`() BEGIN DECLARE `_rollback` BOOL DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; START TRANSACTION; INSERT INTO `tablea` (`date`) VALUES (NOW()); INSERT INTO `tableb` (`date`) VALUES (NOW()); INSERT INTO `tablec` (`date`) VALUES (NOW()); -- FAIL IF `_rollback` THEN ROLLBACK; ELSE COMMIT; END IF; END$$ DELIMITER ;
在此範例中,名為 ' 的預存程序sp_fail' 是使用 SQL 例外處理程序建立的。如果在交易執行期間發生任何異常,處理程序會將「_rollback」標誌設為「1」。執行完所有 SQL 語句後,IF 語句將檢查「_rollback」的值。如果為“1”,則使用 ROLLBACK 語句回滾交易。否則,使用 COMMIT 語句提交交易。
透過利用此技術,您可以確保 MySQL 交易完全執行或完全回滾,從而防止部分更新或資料不一致。
以上是如何保證MySQL事務異常回滾?的詳細內容。更多資訊請關注PHP中文網其他相關文章!