mysql> SHOW VARIABLES LIKE 'autocommit';
默认情况下,如果我们不显式的使用START TRANSACTION或者BEGIN语句开启一个事务,那么每一条语句都算
是一个独立的事务,这种特性称之为事务的自动提交
如果我们想关闭这种自动提交的功能,可以使用下边两种方法之一:
显式的的使用START TRANSACTION或者BEGIN语句开启一个事务。这样在本次事务提交或者回
滚前会暂时关闭掉自动提交的功能。
把系统变量autocommit的值设置为OFF,就像这样: SET autocommit = OFF; 这样的话,我
们写入的多条语句就算是属于同一个事务了,直到我们显式的写出COMMIT语句来把这个事务提交
掉,或者显式的写出ROLLBACK语句来把这个事务回滚掉。
当我们使用START TRANSACTION或者BEGIN语句开启了一个事务,或者把系统变量autocommit的值设置为
OFF时,事务就不会进行自动提交,但是如果我们输入了某些语句之后就会悄悄的提交掉,就像我们输入了
COMMIT语句了一样,这种因为某些特殊的语句而导致事务提交的情况称为隐式提交,这些会导致事务隐式提交
的语句包括:
定义或修改数据库对象的数据定义语言(Data definition language,缩写为:DDL)。所谓的数据
库对象,指的就是数据库、表、视图、存储过程等等这些东西。当我们使用CREATE、ALTER、
DROP等语句去修改这些所谓的数据库对象时,就会隐式的提交前边语句所属于的事务。
隐式使用或修改mysql数据库中的表:当我们使用ALTER USER、CREATE USER、DROP USER、
GRANT、RENAME USER、SET PASSWORD等语句时也会隐式的提交前边语句所属于的事务。
事务控制或关于锁定的语句:当我们在一个事务还没提交或者回滚时就又使用START
TRANSACTION或者BEGIN语句开启了另一个事务时,会隐式的提交上一个事务。或者当前的
autocommit系统变量的值为OFF,我们手动把它调为ON时,也会隐式的提交前边语句所属的事
务。或者使用LOCK TABLES、UNLOCK TABLES等关于锁定的语句也会隐式的提交前边语句所属
的事务。
加载数据的语句:比如我们使用LOAD DATA语句来批量往数据库中导入数据时,也会隐式的提交
前边语句所属的事务。
其它的一些语句:使用ANALYZE TABLE、CACHE INDEX、CHECK TABLE、FLUSH、 LOAD
INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE、RESET等语句也会隐式的提交前边语
句所属的事务。
]