本章节所列出的语句(或是它们的同义词)会导致当前session中的事务隐式地结束,就像在执行该语句前调用过 COMMIT
一样。
它们中的大多数还会在执行过后隐式地进行COMMIT,目的是为了能在各自语句的事务内完成处理。事务控制和锁语句例外;如果在执行前隐式地执行了COMMIT,在执行结束就不会再次执行了
定义或修改数据库对象的数据定义语句(DDL),
ALTER EVENT
,ALTER FUNCTION
,ALTER PROCEDURE
,ALTER SERVER
,ALTER TABLE
,ALTER VIEW
,CREATE DATABASE
,CREATE EVENT
,CREATE FUNCTION
,CREATE INDEX
,CREATE PROCEDURE
,CREATE ROLE
,CREATE SERVER
,CREATE SPATIAL REFERENCE SYSTEM
,CREATE TABLE
,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 TRIGGER
,DROP VIEW
,INSTALL PLUGIN
,RENAME TABLE
,TRUNCATE TABLE
,UNINSTALL PLUGIN
.
如果使用了TEMPORARY
关键字,CREATE TABLE
和DROP TABLE
语句将不会再提交事务(没有在临时表中应用例如ALTER TABLE
和CREATE INDEX
等会导致事务提交的操作),然而即使没有隐式提交,这些语句也是不能被回滚的,这就意味着使用这些语句将导致事务的原子性被破坏,例如,使用CREATE TEMPORARY TABLE
然后回滚这个事务,创建出来的表仍旧存在。
CREATE TABLE
在InnoDB作为一个单独的事务来进行处理。这意味着ROLLBACK
无法撤销当前事务中的CREATE TABLE
所做的操作。
CREATE TABLE ... SELECT
分别在执行创建非临时表前和后隐式地进行COMMIT(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 TRANSCACTION
或它的同义词时,会导致当前事务被隐式提交。
当XA事务是ACTIVE
状态时,那些导致事务隐式提交的语句不能被使用
BEGIN
和符合语句BEGIN ... END
中的BEGIN关键字是不同的,后者不会导致隐式提交 参见Section 13.6.1, “BEGIN … END Compound-Statement Syntax”.数据加载语句
LOAD DATA INFILE
.LOAD DATA INFILE
仅当数据表使用NDB
引擎时会导致隐式提交管理语句
ANALYZE TABLE
,CACHE INDEX
,CHECK TABLE
,FLUSH
,LOAD INDEX INTO CACHE
,OPTIMIZE TABLE
,REPAIR TABLE
,RESET
(但REST PERSIST
不是)复制控制语句
START SLAVE
,STOP SLAVE
, RESET SLAVE, CHANGE MASTER TO.
文章链接 https://fangzongzhou.github.io/2018/08/24/计算机/技术文档/MYSQL/13-3-3-会导致隐式提交的语句/