欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql 自动提交

程序员文章站 2022-07-11 17:58:41
...
进入到新的一家公司后, 发现大家在mysql客户端上执行sql都不写commit,大家都习惯了这种写法,有一天来了另外一个DBA,环境变了,一早上update一个sql,大家发现怎么表被锁住了呢?

后天一发现,新的DBA,把autocommit给关掉了,查看的sql如下:

show variables like 'autocommit';


输出结果如下;

autocommit	OFF


这样的后果有三种:

1. 如果是自己update一条语句后没有提交,再select同样的记录,那么会被锁住

因为在同一个session里,如果update没有提交,再select同样的记录,这样记录会被锁住。

2. 如果是自己update一条语句后没有提交,其它人select会发现旧的记录。
不在同一个session里,别人select的结果是旧的值,这个与事务的隔离级别有关系。

查看事务的隔离级别的命令如下:

select @@global.tx_isolation,@@tx_isolation;


3.  如果是自己update一条语句后没有提交,有它人update同记录会被锁住。

这个与在同一个session里的select情况是一样的。

之前在Oracle工作,一直都是坚持在update语句后commit,个人还是觉得这种习惯好。