溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中有哪些事務(wù)控制語句

發(fā)布時間:2021-07-13 16:42:54 來源:億速云 閱讀:1310 作者:Leah 欄目:MySQL數(shù)據(jù)庫

今天就跟大家聊聊有關(guān)MySQL中有哪些事務(wù)控制語句,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

事務(wù)SQL 控制語句

MySQL事務(wù)遵從ACID:

? Atomic(原子性):所有語句作為一個單元全部成功執(zhí)行或全部取消。

? Consistent(一致性):如果數(shù)據(jù)庫在事務(wù)開始時處于一致狀態(tài),則在執(zhí)行該事務(wù)期間將保留一致狀態(tài)。

? Isolated(隔離性):事務(wù)之間不相互影響。

? Durable(持久性):事務(wù)成功完成后,所做的所有更改都會準(zhǔn)確地記錄在數(shù)據(jù)庫中。所做的更改不會丟失

1) 事務(wù)SQL 控制語句

? START TRANSACTION(或BEGIN):顯式開始一個新事務(wù)

? SAVEPOINT:分配事務(wù)過程中的一個位置,以供將來引用

? COMMIT:永久記錄當(dāng)前事務(wù)所做的更改

? ROLLBACK:取消當(dāng)前事務(wù)所做的更改

? ROLLBACK TO SAVEPOINT:取消在savepoint 之后執(zhí)行的更改

? RELEASE SAVEPOINT:刪除savepoint 標(biāo)識符

? SET AUTOCOMMIT:為當(dāng)前連接禁用或啟用默認(rèn)autocommit 模式

2) AUTOCOMMIT 模式

如何設(shè)置 AUTOCOMMIT 模式?jīng)Q定了如何以及何時開始新事務(wù)。默認(rèn)情況下,AUTOCOMMIT 處于全局啟用狀態(tài),這意味著會強制每個 SQL 語句隱式開始一個新事務(wù)??梢酝ㄟ^一個選項文件全局禁用 AUTOCOMMIT,也可以通過設(shè)置 autocommit 變量為每個會話禁用它。啟用 AUTOCOMMIT 會限制每個語句,并進而影響其自身事務(wù)中的事務(wù)表。這樣可以有效地防止在一個事務(wù)中執(zhí)行多個語句。這意味著,您將無法通過 COMMIT 或 ROLLBACK 作為一個單元提交或回滾多個語句。有時,會將這種情況誤認(rèn)為根本沒有事務(wù)。但是,情況并非如此。啟用 AUTOCOMMIT 后,每個語句仍會以原子方式執(zhí)行。例如,通過在插入多個行時比較違反約束限制的效果,便可看出啟用 AUTOCOMMIT 和根本不具有事務(wù)之間的差別。在非事務(wù)表(如 MyISAM)中,一旦發(fā)生錯誤,語句就會終止,已經(jīng)插入的行會保留在該表中。而對于 InnoDB 表,已經(jīng)插入的所有行都會從該表中刪除,從而不會產(chǎn)生任何實際影響。

AUTOCOMMIT確定開始新事務(wù)的方式和時間;默認(rèn)情況下, AUTOCOMMIT 模式處于啟用狀態(tài):作為一個事務(wù)隱式提交每個語句;

在my.cnf中將 AUTOCOMMIT 模式設(shè)置為 0,或者SET GLOBAL AUTOCOMMIT=0;SET SESSION AUTOCOMMIT=0; SET @@AUTOCOMMIT :=0; 則禁用 AUTOCOMMIT,事務(wù)會跨越多個語句,需要使用 COMMIT 或 ROLLBACK 結(jié)束事務(wù);

使用 SELECT 檢查 AUTOCOMMIT 設(shè)置:

SELECT @@AUTOCOMMIT;

3) 隱式提交

COMMIT 語句始終會顯式提交當(dāng)前事務(wù)。其他事務(wù)控制語句(例如,本幻燈片列出的語句)還具有隱式提交當(dāng)前事務(wù)的作用。除了這些事務(wù)控制語句之外,其他類型的語句可能也具有隱式提交并進而終止)當(dāng)前事務(wù)的作用。這些語句的行為就像在執(zhí)行實際語句之前發(fā)出 COMMIT 一樣。此外,這些語句本身并非事務(wù)語句,也就是說,如果成功,則無法回滾。通常,數(shù)據(jù)定義語句、據(jù)訪問和用戶管理語句以及鎖定語句具有這種效果。

注:有很多例外情況,而且這些語句并非都能在所有版本的服務(wù)器上導(dǎo)致隱式提交。但是,建議將所有非 DML 語句都視為可導(dǎo)致隱式提交。有關(guān)導(dǎo)致隱式提交的完整語句列表,請參閱《MySQL 參考手冊》:http://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html

隱式提交會終止當(dāng)前事務(wù)。用于隱式提交的 SQL 語句:

l  START TRANSACTION

l  SET AUTOCOMMIT = 1

導(dǎo)致提交的非事務(wù)語句:

l  數(shù)據(jù)定義語句(ALTER、 CREATE 和 DROP)

l  管理語句(GRANT、 REVOKE 和 SET PASSWORD)

l  鎖定語句(LOCK TABLES 和 UNLOCK TABLES)

導(dǎo)致隱式提交的語句示例:

Mysql>TRUNCATE TABLE

Mysql>LOAD DATA INFILE

4) 事務(wù)存儲引擎

使用 SHOW ENGINES 列出引擎特征:

mysql> SHOW ENGINES\G

********************* 2. row *********************

Engine: InnoDB

Support: DEFAULT

Comment: Supports transactions, row-level locking,

and foreign keys

Transactions: YES

XA: YES

Savepoints: YES

********************* 1. row *********************

Engine: MyISAM

Support: YES

Comment: MyISAM storage engine

Transactions: NO

XA: NO

Savepoints: NO

看完上述內(nèi)容,你們對MySQL中有哪些事務(wù)控制語句有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI