本节中列出的语句(及其任何同义词)会隐式结束当前会话中任何活动的事务,就好像您在执行该语句之前执行了 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
然后回滚事务,该表将继续存在。CREATE TABLE
语句在InnoDB
中被处理为一个单独的事务。 这意味着来自用户的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
仅当任何表当前已通过LOCK TABLES
锁定以获取非事务表锁时才会提交事务。 对于UNLOCK TABLES
之后的FLUSH TABLES WITH READ LOCK
不会发生提交,因为后者不会获取表级锁。事务不能嵌套。 这是您发出
START TRANSACTION
语句或其同义词之一时对当前事务执行隐式提交的结果。导致隐式提交的语句不能在 XA 事务处于
ACTIVE
状态时使用。BEGIN
语句不同于使用开始BEGIN ... END
复合语句的BEGIN
关键字。 后者不会导致隐式提交。 请参见 第 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
。