Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL工作台:启动事务似乎在回滚之前提交_Mysql_Mysql Workbench - Fatal编程技术网

MySQL工作台:启动事务似乎在回滚之前提交

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

我编写了一组delete语句,并将它们包装在一个事务中:

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;

确保关闭
自动提交