mysql的事务语句_MySQL提供的事务控制语句
在MySQL命令行的默認設置下,事務都是自動提交的,即執行SQL語句后就會馬上執行COMMIT操作。因此要顯式地開啟一個事務需要使用命令BEGIN, START TRANSACTION, 或者執行命令SET AUTOCOMMIT=0, 禁用當前會話的自動提交。
每個數據庫廠商自動提交的設置都會不相同,每個DBA或開發人員需要非常明白這一點,這對之后的SQL編程會有非凡的意義,因此用戶不能以之前的經驗來判斷MySQL數據庫的運行方式。
MySQL為開發者提供了三種類型的事務,分別是扁平化事務,帶保存點的事務,鏈式事務。通過帶保存點的事務還可以模擬實現嵌套事務。
START TRANSACTION | BEGIN
顯式地開啟一個事務。
COMMIT
要想使用這個語句的最簡形式,只需要發出COMMIT。也可以更詳細一點,寫為COMMIT WORK, 不過這兩者幾乎是等價的。COMMIT會提交事務,并使得已對數據庫做的修改稱為永久性的。
ROLLBACK
要想使用這個語句的最簡形式,只需要發出ROLLBACK。同樣地,也可以寫為ROLLBACK WORK,但兩者幾乎是等價的。回滾會結束用戶的事務,并撤銷正在進行的所有未提交的修改。
SAVEPOINT identity
SAVEPOINT允許在事務中創建一個保存點,一個事務中可以有多個SAVEPOINT。
RELEASE SAVEPOINT identity
刪除一個事務的保存點,當沒有一個保存點執行這語句時,會拋出一個異常。
ROLLBACK TO [SAVEPOINT] identity
這個語句與SAVEPOINT命令一起使用。可以把事務回滾到標記點,而不回滾在此標記點之前的任何工作。
例如,可以發出兩調UPDATE語句,后面跟一個SAVEPOINT, 然后又是兩條DELETE語句。如果執行DELETE語句期間出現了某種異常情況,并且捕獲到這個異常,同時發出了ROLLBACK TO SAVEPOINT命令,事務就會回滾到指定的SAVEPOINT,撤銷DELETE完成的所有工作,而UPDATE語句完成的工作不受影響。
SET TRANSACTION
這個語句用來設置事務的隔離級別。
InnoDB存儲引擎提供的事務隔離級別有:READ UNCOMMITED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
START TRANSACTION, BEGIN語句都可以在MySQL命令行下顯示地開啟一個事務。但是在存儲過程中,MySQL數據庫的分析器會自動將BEGIN識別為BEGIN...END, 因此在存儲過程中只能使用START TRANSACTION語句來開啟一個事務。
COMMIT和COMMIT WORK語句基本是一致的,都是用來提交事務。不同之處在于COMMIT WORK用來控制事務結束后的行為是CHAIN還是RELEASE的。如果是CHAIN方式,那么事務就變成了鏈事務。
用戶可以通過參數completion_type來進行控制,該參數默認為0,表示沒有任何操作。
當參數completion_type的值為1時,COMMIT WORK等同于COMMIT AND CHAIN, 表示馬上自動開啟一個相同隔離級別的事務。
當參數completion_type的值為2時,COMMIT WORK等同于COMMIT AND RELEASE, 在事務提交后會自動斷開與服務器的連接。
總結
以上是生活随笔為你收集整理的mysql的事务语句_MySQL提供的事务控制语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UC浏览器电脑版怎么自定义标签栏 标签栏
- 下一篇: 谷歌浏览器无网络连接 打不开网页解决办法