Mysql 遇到神奇的“本次本客户端效现象”,数据库并未被改变 + 神奇“卡顿现象”

Posted 一乐乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 遇到神奇的“本次本客户端效现象”,数据库并未被改变 + 神奇“卡顿现象”相关的知识,希望对你有一定的参考价值。

Mysql 遇到神奇的“本次本客户端效现象”,数据库并未被改变+   神奇“卡顿现象”

结论:commit 好处多多,既能保证执行操作结果符合实际情况,还能“刷新”

◆◆场景:为了测试关闭自动提交真的有效吗?的情况下的发现:

 

1,神奇的“本客户端效现象”

◇◇客户端:mysqlworkbench

◇代码:

#事务

#创建事务

drop table if exists `Acount`;

CREATE TABLE `Acount`(

       `id` int PRIMARY KEY AUTO_INCREMENT,

    `name` varchar(50),

    `money` float

)ENGINE=InnoDB, charSet=utf8mb4;

 

#添加数据

INSERT INTO `Acount` VALUES (default, \'huanglaoban\', 100);

INSERT INTO `Acount` VALUES (default, \'dangdang\', 100);

select * from `Acount`;

#模拟转账场景:

set sql_safe_updates=0; /*取消安全模式*/

 #关闭自动提交事务

 set autocommit=0;

 show variables like \'autocommit\';

#举例转账事务

start transaction;

    update `Acount` set `money` = `money` - 10 where `name` = \'huanglaoban\';

    update `Acount` set `money` = `money` + 10 where `name` = \'dangdang\';

commit;

 set sql_safe_updates=1;/*设置回安全模式*/

  #设置自动提交事务

 set autocommit=1;

 select * from `Acount`;      

结果完美,没问题!我们要的效果符合实际。

 

 

 

 

◇测试关闭自动提交真的有效吗?

代码语句:

set sql_safe_updates=0; /*取消安全模式*/
 #关闭自动提交事务 
 set autocommit=0;
update `Acount` set `money` = `money` - 10 where `name` = \'huanglaoban\';
select * from `Acount`;

 

 

此刻试试在控制台关闭自动提交,再试试结果怎么样:结果mysqlworkbench依然刹不住车,什么操作它照常执行,而mysql控制台,依然面不改色,不为所动,不给执行操作。

最后,我明白,一切神奇现象的背后是:少了个commit的提交。

因为没有COMMIT,就算AUTOCOMMIT的值等于1,也会不提交到数据库。

 

 

 2,神奇“卡顿现象”

场景:先在服务端关闭自动提交后,直接设置可以自动提交后,卡顿想现象发生:

看我控制台大疑惑:

 

解决:老铁补上commit,相当于“刷新功效”吧

 

 

最后,大总结:

commit 好处多多,既能保证执行操作结果符合实际情况,还能“刷新”

 

参考文章:

https://blog.csdn.net/weixin_43182179/article/details/114678955

https://blog.csdn.net/xiaoyi23000/article/details/51690601/

http://c.biancheng.net/view/7291.html

 

以上是关于Mysql 遇到神奇的“本次本客户端效现象”,数据库并未被改变 + 神奇“卡顿现象”的主要内容,如果未能解决你的问题,请参考以下文章

连接状态 MySql Connector/NET

云服务上使用神奇的nginx --with-stream模块开启mysql外网地址

神奇的sql语句

一个神奇SQL引发的故障

centos7.x编译安装mysql5.7.16

覆盖索引(covering index)一次神奇的MySQL优化