本節列出的語句(以及它們的任何同義詞)會隱式地結束目前工作階段中任何活動的交易,就如同在執行語句之前執行了 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
。