本节列出的语句(及其同义词)将隐式结束当前会话中的活动事务,就像您执行了 COMMIT
之前执行该语句一样。
这些语句中的大多数也会在执行后隐式提交。意图是将每个语句作为其自己的特殊事务处理。事务控制和锁定语句是例外:如果在执行之前发生隐式提交,那么在执行后不会再次发生隐式提交。
-
定义或修改数据库对象的数据定义语言(DDL)语句。
ALTER EVENT
,ALTER FUNCTION
,ALTER PROCEDURE
,ALTER SERVER
,ALTER TABLE
,ALTER TABLESPACE
,ALTER VIEW
,CREATE DATABASE
,CREATE EVENT
,CREATE FUNCTION
,CREATE INDEX
,CREATE PROCEDURE
,CREATE ROLE
,CREATE SERVER
,CREATE SPATIAL REFERENCE SYSTEM
,CREATE TABLE
,CREATE TABLESPACE
,CREATE TRIGGER
,CREATE VIEW
,DROP DATABASE
,DROP EVENT
,DROP FUNCTION
,DROP INDEX
,DROP PROCEDURE
,DROP ROLE
,DROP SERVER
,DROP SPATIAL REFERENCE SYSTEM
,DROP TABLE
,DROP TABLESPACE
,DROP TRIGGER
,DROP VIEW
,INSTALL PLUGIN
,RENAME TABLE
,TRUNCATE TABLE
,UNINSTALL PLUGIN
。CREATE TABLE
和DROP TABLE
语句不会提交事务,如果使用TEMPORARY
关键字。(这不适用于其他临时表操作,如ALTER TABLE
和CREATE INDEX
,这些操作会导致提交。)然而,虽然没有隐式提交,但这些语句也不能回滚,这意味着这些语句会违反事务的原子性。例如,如果您使用CREATE TEMPORARY TABLE
,然后回滚事务,表仍然存在。在
InnoDB
中,CREATE TABLE
语句被处理为单个事务。这意味着用户的ROLLBACK
不会撤销用户在该事务中执行的CREATE TABLE
语句。CREATE TABLE ... SELECT
在执行语句之前和之后隐式提交事务,当您创建非临时表时。(对于CREATE TEMPORARY TABLE ... SELECT
,不提交。) -
隐式使用或修改
mysql
数据库中的表的语句。ALTER USER
,CREATE USER
,DROP USER
,GRANT
,RENAME USER
,REVOKE
,SET PASSWORD
。 -
事务控制和锁定语句。
BEGIN
,LOCK TABLES
,SET autocommit = 1
(如果值不是已经是 1),START TRANSACTION
,UNLOCK TABLES
。UNLOCK TABLES
只有在当前事务中锁定了表时才提交事务。(对于FLUSH TABLES WITH READ LOCK
,不提交。)事务不能嵌套。这是因为隐式提交当前事务时,您发出
START TRANSACTION
语句或其同义词。隐式提交语句不能在 XA 事务的 ACTIVE 状态下使用。
BEGIN
语句不同于使用BEGIN
关键字开始BEGIN ... END
复合语句。后者不隐式提交。见 第 15.6.1 节,“BEGIN ... END 复合语句”。 -
管理语句。
ANALYZE TABLE
,CACHE INDEX
,CHECK TABLE
,FLUSH
,LOAD INDEX INTO CACHE
,OPTIMIZE TABLE
,REPAIR TABLE
,RESET
(但不包括RESET PERSIST
)。 -
复制控制语句.
START REPLICA
,STOP REPLICA
,RESET REPLICA
,CHANGE REPLICATION SOURCE TO
。