我找不到在MySql存儲過程中使用事務的最佳方式。我想ROLLBACK
如果有什麼失敗:MySql存儲過程,事務和回滾
BEGIN
SET autocommit=0;
START TRANSACTION;
DELETE FROM customers;
INSERT INTO customers VALUES(100);
INSERT INTO customers VALUES('wrong type');
COMMIT;
END
1)要求autocommit=0
?
2)如果第二個INSERT
中斷(當然它),第一個INSERT
不回滾。程序簡單地繼續到COMMIT
。我怎樣才能防止這一點?
3)我發現我可以DECLARE HANDLER
,我應該使用這個指令還是有一種更簡單的方式來說,如果有任何命令失敗,存儲過程應該是ROLLBACK
並且失敗呢?
DECLARE HANDLER
工作正常,但由於我有MySql版本5.1我不能使用RESIGNAL
。因此,如果發生錯誤,調用者將不會收到通知:
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
-- RESIGNAL; not in my version :(
END;
START TRANSACTION;