当前位置:   article > 正文

Navicat Premium 操作MySql 取消自动提交(取消自动commit)_navicate在哪里rollback

navicate在哪里rollback

今天同事在使用Navicat Premium 操作MySql时,想执行某条件的SELECT语句查询是否有数据,没注意粘贴的是 DELETE 语句,点击执行后意识到问题 ,立即执行rollback,再查询发现数据还是被删掉了。然后就想将Navicat Premium 自动提交给取消,防止之后再发生此类情况。
查询了下 Navicat Premium 软件本身没找到可设置取消自动提交的选项,从MySql 的角度看有没有解决方式。先说结论:
将执行DML语句时,在SQL语句前设置 set autocommit = 0; 即取消MySql 的自动提交,举例:

set autocommit = 0;
delete from table1 where id =xxx;
commit;  or  rollback;
  • 1
  • 2
  • 3

该方式可使Navicat Premium 不自动提交SQL语句,生效需要手动commit 或者 rollback
需要注意的是:该方式的生效范围为session 级别,即重新登录,或者打开新的查询页面,都需要单独设置该参数,否则使用的还是MySql 的默认设置
MySql 的默认设置,可通过以下语句查看。

show variables like 'autocommit'
  • 1

下面为当时的实验步骤:
(1)查看MySql默认commit 设置,ON为自动提交
在这里插入图片描述

(2) 创建测试表并插入基础数据

create table testrollback(
id int,
info varchar(200)
);

insert into testrollback values (1,'info1');
insert into testrollback values (2,'info2');
insert into testrollback values (3,'info3');
insert into testrollback values (4,'info4');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(3) 同时执行以下查询-删除数据-查询结果-执行rollback-查询结果 语句

select * from testrollback ;
delete from testrollback where id =4;
select * from testrollback ;
rollback;
select * from testrollback ;
  • 1
  • 2
  • 3
  • 4
  • 5

3次查询结果分别如下:
第一次:
在这里插入图片描述
第二次:
在这里插入图片描述
第三次:
在这里插入图片描述
可以发现,删除后执行的rollback 并未生效,id=4 的数据还是被删掉了。

(4) 设置 autocommit - 删除数据-查询结果-执行rollback-查询结果 语句
同时执行如下语句:

set autocommit = 0;
delete from testrollback where id =3;
select * from testrollback ;
rollback;
select * from testrollback ;
  • 1
  • 2
  • 3
  • 4
  • 5

2次查询结果分别如下:
第一次:
在这里插入图片描述
第二次:
在这里插入图片描述
这时发现, delete 后 的rollback语句生效了,达到了想要的效果。

这时查看

show variables like 'autocommit'
  • 1

属性已设置为 OFF
在这里插入图片描述

重新打开查询界面或重新登录后,该属性依旧为 ON ,即该设置为 session 级别,重新登录,或者打开新的 查询页面,都需要单独设置。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/173625
推荐阅读
相关标签
  

闽ICP备14008679号