本节中列出的语句(及其任何同义词)会隐式地结束当前会话中任何活动的交易,就好像您在执行语句之前执行了 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
仅在当前有任何表使用LOCK TABLES
锁定以获取非事务性表级锁时才会提交事务。在FLUSH TABLES WITH READ LOCK
后执行UNLOCK TABLES
不会发生提交,因为后者语句不会获取表级锁。事务不能嵌套。这是在您发出
START TRANSACTION
语句或其同义词之一时,对任何当前事务执行隐式提交的结果。在事务处于
ACTIVE
状态时,无法在 XA 事务中使用导致隐式提交的语句。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
.