vul*_*ino 11 mysql stored-procedures commit rollback
我找不到在MySql存储过程中使用事务的最佳方法.ROLLBACK如果有任何失败我想要:
BEGIN
SET autocommit=0;
START TRANSACTION;
DELETE FROM customers;
INSERT INTO customers VALUES(100);
INSERT INTO customers VALUES('wrong type');
COMMIT;
END
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
Fab*_*ien 10
回答1:您不需要设置autocommit = 0
使用START TRANSACTION时,自动提交将保持禁用状态,直到您使用COMMIT或ROLLBACK结束事务.然后,自动提交模式将恢复为先前的状态.
http://dev.mysql.com/doc/refman/5.6/en/commit.html
| 归档时间: |
|
| 查看次数: |
16701 次 |
| 最近记录: |