您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關MySQL中有哪些事務控制語句,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
MySQL事務遵從ACID:
? Atomic(原子性):所有語句作為一個單元全部成功執行或全部取消。
? Consistent(一致性):如果數據庫在事務開始時處于一致狀態,則在執行該事務期間將保留一致狀態。
? Isolated(隔離性):事務之間不相互影響。
? Durable(持久性):事務成功完成后,所做的所有更改都會準確地記錄在數據庫中。所做的更改不會丟失
1) 事務SQL 控制語句
? START TRANSACTION(或BEGIN):顯式開始一個新事務
? SAVEPOINT:分配事務過程中的一個位置,以供將來引用
? COMMIT:永久記錄當前事務所做的更改
? ROLLBACK:取消當前事務所做的更改
? ROLLBACK TO SAVEPOINT:取消在savepoint 之后執行的更改
? RELEASE SAVEPOINT:刪除savepoint 標識符
? SET AUTOCOMMIT:為當前連接禁用或啟用默認autocommit 模式
2) AUTOCOMMIT 模式
如何設置 AUTOCOMMIT 模式決定了如何以及何時開始新事務。默認情況下,AUTOCOMMIT 處于全局啟用狀態,這意味著會強制每個 SQL 語句隱式開始一個新事務。可以通過一個選項文件全局禁用 AUTOCOMMIT,也可以通過設置 autocommit 變量為每個會話禁用它。啟用 AUTOCOMMIT 會限制每個語句,并進而影響其自身事務中的事務表。這樣可以有效地防止在一個事務中執行多個語句。這意味著,您將無法通過 COMMIT 或 ROLLBACK 作為一個單元提交或回滾多個語句。有時,會將這種情況誤認為根本沒有事務。但是,情況并非如此。啟用 AUTOCOMMIT 后,每個語句仍會以原子方式執行。例如,通過在插入多個行時比較違反約束限制的效果,便可看出啟用 AUTOCOMMIT 和根本不具有事務之間的差別。在非事務表(如 MyISAM)中,一旦發生錯誤,語句就會終止,已經插入的行會保留在該表中。而對于 InnoDB 表,已經插入的所有行都會從該表中刪除,從而不會產生任何實際影響。
AUTOCOMMIT確定開始新事務的方式和時間;默認情況下, AUTOCOMMIT 模式處于啟用狀態:作為一個事務隱式提交每個語句;
在my.cnf中將 AUTOCOMMIT 模式設置為 0,或者SET GLOBAL AUTOCOMMIT=0;SET SESSION AUTOCOMMIT=0; SET @@AUTOCOMMIT :=0; 則禁用 AUTOCOMMIT,事務會跨越多個語句,需要使用 COMMIT 或 ROLLBACK 結束事務;
使用 SELECT 檢查 AUTOCOMMIT 設置:
SELECT @@AUTOCOMMIT;
3) 隱式提交
COMMIT 語句始終會顯式提交當前事務。其他事務控制語句(例如,本幻燈片列出的語句)還具有隱式提交當前事務的作用。除了這些事務控制語句之外,其他類型的語句可能也具有隱式提交并進而終止)當前事務的作用。這些語句的行為就像在執行實際語句之前發出 COMMIT 一樣。此外,這些語句本身并非事務語句,也就是說,如果成功,則無法回滾。通常,數據定義語句、據訪問和用戶管理語句以及鎖定語句具有這種效果。
注:有很多例外情況,而且這些語句并非都能在所有版本的服務器上導致隱式提交。但是,建議將所有非 DML 語句都視為可導致隱式提交。有關導致隱式提交的完整語句列表,請參閱《MySQL 參考手冊》:http://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html
隱式提交會終止當前事務。用于隱式提交的 SQL 語句:
l START TRANSACTION
l SET AUTOCOMMIT = 1
導致提交的非事務語句:
l 數據定義語句(ALTER、 CREATE 和 DROP)
l 管理語句(GRANT、 REVOKE 和 SET PASSWORD)
l 鎖定語句(LOCK TABLES 和 UNLOCK TABLES)
導致隱式提交的語句示例:
Mysql>TRUNCATE TABLE
Mysql>LOAD DATA INFILE
4) 事務存儲引擎
使用 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
看完上述內容,你們對MySQL中有哪些事務控制語句有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。