简单介绍下autocommit参数,下文内容只在Innodb引擎下有效,因为Innodb支持事务,MyISAM不支持
环境:mysql8(innodb),mac M1
一、autocommit参数是一个客户端参数,或者说是连接参数。
为了演示autocommit参数的效果,这里创建两个连接,两个连接的是我本地的同一个数据库,只是连接名不同。
1、查询当前连接的autocommit参数
show variables like "autocommit"
另一个连接的autocommit的值也是ON,因为默认是ON
2、修改当前连接的autocommit参数
## 其中0=OFF,1=ON
set autocommit = 0
再查一下mysql2连接的autocommit
可以看出autocommit是属于连接的参数,不是数据库参数。每个连接各有一个autocommit参数。
二、autocommit参数的作用
autocommit:自动提交。提交指的是事务提交,顾名思义,当开启自动提交之后,你的每一次sql执行都会立马作为一个事务提交。如果关闭自动提交,你执行的sql都不会生效,除非你手动执行commit
示例
就不用navicat来演示了,因为navicat好像会隐式的在每一次执行的最后加一个commit。我没找到在哪里关闭这个功能。。。。
所以直接用命令行演示。
1、开启一个连接,并设置autocommit参数为OFF,然后执行一条插入语句,发现表里有数据。但这时数据并没有真正的插入到表里,只有当手动输入commit之后,数据才会真正写入表里。
2、开启另一个连接来检查刚刚的insert操作。确实是查不到数据。
3、用第一个连接,执行一次commit
4、第二个连接再次查询,发现数据写入。
5、我就不演示autocommit为ON的情况了,默认就是ON,大家平时用的应该也是ON。