我找不到在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;