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