本節列出的陳述式(及其任何同義詞)會隱含地結束當前工作階段中任何活動的交易,如同您在執行該陳述式之前執行了 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
。只有當目前有任何資料表已使用
LOCK TABLES
鎖定以取得非交易資料表鎖定時,UNLOCK 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
。