MySQL的SQL語句 -事務性語句和鎖定語句(2)- 致使隱式提交的語句

致使隱式提交的語句html

本節中列出的語句(以及它們的任何同義詞)隱式結束當前會話中活動的任何事務,就像在執行語句以前執行了 COMMIT 同樣。mysql

大多數這些語句在執行後也會致使隱式提交。其目的是在本身的特殊事務中處理這樣的語句。事務控制和鎖定語句是例外:若是隱式提交發生在執行以前,另外一個則不會在執行以後發生。sql

● 定義或修改數據庫對象的數據定義語言(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。ide

若是使用了 TEMPORARY 關鍵字,CREATE TABLE 和 DROP TABLE 語句不會提交事務。(這不適用於臨時表上的其餘操做,例如 ALTER TABLE 和 CREATE INDEX,它們確實會致使提交)可是,雖然沒有隱式提交,可是語句也不能回滾,這意味着使用這些語句會致使違反事務原子性。例如,若是使用 CREATE TEMPORARY TABLE 語句,而後回滾事務,該表仍然存在。htm

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。ci

● 事務控制和鎖定語句。BEGIN, LOCK TABLES, SET autocommit = 1(若是值不是1),START TRANSACTION, UNLOCK TABLES。get

只有當某些表當前已用 LOCK TABLES 鎖定以獲取非事務性表鎖時,UNLOCK TABLES 纔會提交事務。對於帶有 UNLOCK TABLES 的 FLUSH TABLES WITH READ LOCK 語句,不會發生提交,由於該語句不獲取表級鎖。

事務不能嵌套。這是在執行 START TRANSACTION 語句或其同義詞時,對任何當前事務執行隱式提交的結果。

當事務處於活動狀態時,不能在 XA 事務中使用致使隱式提交的語句。

BEGIN 語句不一樣於使用 BEGIN 關鍵字來啓動的 BEGIN ... END 複合語句。後者不會致使隱式提交。

● 數據加載語句。LOAD DATA。LOAD DATA 只會引發使用 NDB 存儲引擎的表隱式提交。

● 管理語句。ANALYZE TABLE, CACHE INDEX, CHECK TABLE, FLUSH, LOAD INDEX INTO CACHE, OPTIMIZE TABLE, REPAIR TABLE, RESET (不是 RESET PERSIST)。

● 複製控制語句。START REPLICA | SLAVE, STOP REPLICA | SLAVE, RESET REPLICA | SLAVE, CHANGE MASTER TO。

官方網址:
https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html

相關文章
相關標籤/搜索