show variables like 'autocommit';
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
我们可以看到autocommit的值为ON,说明MySql默认是开启了自动提交事务的。什么意思呢?我们举例说明一下:
CREATE TABLE `keyvalue` ( `key` int(11) NOT NULL AUTO_INCREMENT, `value` int(11) DEFAULT NULL, PRIMARY KEY (`key`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
insert into keyvalue(`value`)values(3);
3.在终端2中查询,这时候是可以查询到的
select * from keyvalue where `value`=3;
4.修改autocommit为OFF
set session autocommit=0;
5.重新执行2-3步骤,这时候的终端2中是查不到终端1中插入的数据的,也就是终端1中插入的数据对终端2不可见。
6.在终端1中提交事务,再次在终端2中查看,这时候就可以查看到了。
7.总结:
1.当autocommit为ON状态时,即使没有手动start transaction开启事务,mysql默认也会将用户的操作当做事务即时提交。
2.当autocommit为OFF状态时,mysql仍然会自动开启事务,但是需要用户手动提交,未提交前,A事务对数据库做的修改对B事务是不可见的。
8.思考:当autocommit为ON状态时,用户手动开启事务,mysql会不会自动提交?
答案是:不会
我们测试一下,先将autocommit设置为ON,然后在终端1手动开启一个事务,在终端2中查询,从结果来看,在未手动提交前,终端2中是查看不到的。