MySQL入門--事務控制語句
事務 SQL 控制語句
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 伺服器中,並且可以在執行時使用,可使用 SHOW ENGINES 語句。 Support 列中的值為 YES 或 NO ,用於指示該引擎是否可以使用。如果該值為 DISABLED 則表示該引擎存在,但已關閉。值 DEFAULT 用於指示伺服器在預設情況下使用的儲存引擎。指定為 DEFAULT 的引擎應視為可用。 Transactions 、 XA 和 Savepoints 列用於指示該儲存引擎是否支援這些功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16976507/viewspace-2645832/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 入門MySQL——DML語句篇MySql
- 入門MySQL——基礎語句篇MySql
- [MySQL光速入門]020 事務MySql
- MySQL入門--事務與鎖MySql
- 2020-12-30 Python入門(控制語句)Python
- MySQL入門---(一)SQL的DDL語句MySql
- MySQL 入門(3):事務隔離MySql
- Go快速入門 03 | 控制結構:if、for、switch 邏輯語句Go
- flask之控制語句 if 語句與for語句Flask
- 控制語句
- Python入門 - 判斷語句Python
- MySQL在預設事務下各SQL語句使用的鎖分析MySql
- Python 入門 :基本條件語句Python
- Java 控制語句Java
- python 控制語句Python
- mysql語句MySql
- MySQL – 事務的啟動 / 設定 / 鎖 / 解鎖——入門MySql
- C# 從程式碼入門 Mysql 資料庫事務C#MySql資料庫
- 【廖雪峰python入門筆記】if語句Python筆記
- C++入門教程(9):while 語句C++While
- 《Java從入門到失業》第三章:基礎語法及基本程式結構(3.8):流程控制(迴圈語句、while語句、for語句)JavaWhile
- 流程控制語句
- 複雜控制語句
- 2 控制流語句
- [MySQL光速入門]018 流程控制MySql
- mySql常用語句MySql
- MySQL的語句MySql
- MySQL replace語句MySql
- 《Java從入門到失業》第三章:基礎語法及基本程式結構(3.8):流程控制(選擇語句、if-else語句、switch語句)Java
- Python趣味入門5:迴圈語句whilePythonWhile
- Oracle vs PostgreSQL,研發注意事項(2)-DDL語句與事務OracleSQL
- Go 語言操作 MySQL 之 事務操作GoMySql
- 資料庫事務入門指南資料庫
- Java™ 教程(控制流語句)Java
- 5、控制語句的使用
- Go:條件控制語句Go
- Java流程控制語句Java
- 【分支流程控制語句、迴圈流程控制語句】的學習