当使用start transaction或begin语句开启一个事务,或者将系统变量auto commit设置为off时,事务不会自动提交,但是如果当输入某些语句会隐式的被提交掉,就像输入了commit语句一样,这种因为某些特殊的语句而导致事务提交的情况叫做隐式提交,会导致事务隐式提交语句包括:
(1)定义或修改数据库对象的数据定义语言DDL,数据库对象指的是数据库、表、视图、存储过程等。当使用create、alter、drop等语句去修改这些数据库对象时,就会隐式的提交前边的语句所属于的事务。
(2)隐式使用或修改MySQL中的表:当使用alter user、create user、drop user、grant、rename user、set password等语句时也会隐式提交前边的语句所属于的事务。
(3)事务控制或关于锁定的语句:当在一个事务没提交或回滚时就使用start transaction或者begin语句开启了另一个事务时,会隐式提交上一个事务。或者当前的auto commit系统变量值为off,手动改为on时,也会隐式提交前边的语句所属的事务。或者使用lock tables、unlock tables等关于锁定的语句也会隐式的提交前边语句所属的事务。
(4)加载数据的语句。比如使用load data语句批量往数据库导入数据时,也会隐式的提交前边语句所属的事务。
(5)其他的一些语句。使用analyze table、cache index、check table、flush、load index into cache、optimize table、repair table、reset等语句也会隐式的提交前边语句所属的事务。