MySQL工作台:启动事务似乎在回滚之前提交
我编写了一组delete语句,并将它们包装在一个事务中:MySQL工作台:启动事务似乎在回滚之前提交,mysql,mysql-workbench,Mysql,Mysql Workbench,我编写了一组delete语句,并将它们包装在一个事务中: start transaction; delete a... delete b... delete c... rollback; 我的想法是,我希望删除发生在一个事务中,该事务将在完成后回滚。如果一个步骤失败了,我希望成功的步骤也被回滚 令我懊恼的是,delete a成功了,删除了几千行,delete b失败了,但当我重新运行语句时,a中的所有记录似乎都消失了 这是因为交易仍在进行中吗?我试着做: set session transac
start transaction;
delete a...
delete b...
delete c...
rollback;
我的想法是,我希望删除发生在一个事务中,该事务将在完成后回滚。如果一个步骤失败了,我希望成功的步骤也被回滚
令我懊恼的是,delete a
成功了,删除了几千行,delete b
失败了,但当我重新运行语句时,a中的所有记录似乎都消失了
这是因为交易仍在进行中吗?我试着做:
set session transaction isolation level read committed;
select a.*
并且返回了零行,所以我认为情况并非如此。成功的
a
delete是否已提交?如果是这样的话,在我能够保证一个完整的工作查询之前,如何防止这种情况发生?MySQL Workbench默认启用自动提交。SQL编辑器中有一个工具栏按钮,可用于随意切换自动提交:
有人让我兴奋,我认为这是一个更好的方法:
begin;
<sql transactions>
commit;
开始;
犯罪
尝试将自动提交标志设置为false:
set @@autocommit = false;
start transaction;
delete a...
delete b...
delete c...
rollback;
确保关闭
自动提交
。