Navicat Premium 操作MySql 取消自动提交(取消自动commit)

今天同事在使用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;

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

show variables like 'autocommit'

下面为当时的实验步骤:
(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');

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

select * from testrollback ;
delete from testrollback where id =4;
select * from testrollback ;
rollback;
select * from testrollback ;

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

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

set autocommit = 0;
delete from testrollback where id =3;
select * from testrollback ;
rollback;
select * from testrollback ;

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

这时查看

show variables like 'autocommit'

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

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

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值