簡(jiǎn)單介紹MySQL中的事務(wù)機(jī)制(2)_MySQL教程
推薦:mysql查詢區(qū)分大小寫(xiě)高性能mysql查詢默認(rèn)是不區(qū)分大小寫(xiě)的 如: 效果是一樣的。 要讓mysql查詢區(qū)分大小寫(xiě),可以: 也可以在建表時(shí),加以標(biāo)識(shí) 測(cè)試30W數(shù)據(jù) 不支持索引,查詢效率底下,不建議考慮。上面這些sql語(yǔ)句乍看不會(huì)有什么問(wèn)題,但是當(dāng)表中的數(shù)據(jù)多了以后,問(wèn)題就會(huì)凸顯出來(lái),用不到索引,
鏈?zhǔn)聞?wù)
鏈?zhǔn)聞?wù),就是指回滾時(shí),只能恢復(fù)到最近一個(gè)保存點(diǎn);而帶有保存點(diǎn)的扁平事務(wù)則可以回滾到任意正確的保存點(diǎn)。
嵌套事務(wù)
看下面這個(gè),你就能明白了,啥是嵌套事務(wù):
BEGIN WORK
SubTransaction1:
BEGIN WORK
SubOperationX
COMMIT WORK
SubTransaction2:
BEGIN WORK
SubOperationY
COMMIT WORK
...
SubTransactionN:
BEGIN WORK
SubOperationN
COMMIT WORK
COMMIT WORK
這就是嵌套事務(wù),在事務(wù)中再嵌套事務(wù),位于根節(jié)點(diǎn)的事務(wù)稱為頂層事務(wù)。事務(wù)的前驅(qū)稱為父事務(wù),其它事務(wù)稱為子事務(wù)。事務(wù)的前驅(qū)稱為父事務(wù),事務(wù)的下一層稱為子事務(wù)。
子事務(wù)既可以提交也可以回滾,但是它的提交操作并不馬上生效,除非由其父事務(wù)提交。因此就可以確定,任何子事務(wù)都在頂層事務(wù)提交后才真正的被提交了。同理,任意一個(gè)事務(wù)的回滾都會(huì)引起它的所有子事務(wù)一同回滾。
分布式事務(wù)
分布式事務(wù)通常是指在一個(gè)分布式環(huán)境下運(yùn)行的扁平事務(wù),因此需要根據(jù)數(shù)據(jù)所在位置訪問(wèn)網(wǎng)絡(luò)中的不同節(jié)點(diǎn),比如:通過(guò)建設(shè)銀行向招商銀行轉(zhuǎn)賬,建設(shè)銀行和招商銀行肯定用的不是同一個(gè)數(shù)據(jù)庫(kù),同時(shí)二者的數(shù)據(jù)庫(kù)也不在一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上,那么當(dāng)用戶跨行轉(zhuǎn)賬,就是通過(guò)分布式事務(wù)來(lái)保證數(shù)據(jù)的ACID的。
MySQL中使用事務(wù)
理論總結(jié)的再好,終歸都要通過(guò)實(shí)踐來(lái)進(jìn)行理解。下面就來(lái)說(shuō)說(shuō)MySQL中是如何使用事務(wù)的。
在MySQL命令行的默認(rèn)設(shè)置下,事務(wù)都是自動(dòng)提交的,即執(zhí)行SQL語(yǔ)句后就會(huì)馬上執(zhí)行COMMIT操作。因此要顯示地開(kāi)啟一個(gè)事務(wù)須使用命令BEGIN或START TRANSACTION,或者執(zhí)行命令SET AUTOCOMMIT=0,用來(lái)禁止使用當(dāng)前會(huì)話的自動(dòng)提交。
來(lái)看看我們可以使用哪些事務(wù)控制語(yǔ)句。
BEGIN或START TRANSACTION;顯示地開(kāi)啟一個(gè)事務(wù);
COMMIT;也可以使用COMMIT WORK,不過(guò)二者是等價(jià)的。COMMIT會(huì)提交事務(wù),并使已對(duì)數(shù)據(jù)庫(kù)進(jìn)行的所有修改稱為永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不過(guò)二者是等價(jià)的�;貪L會(huì)結(jié)束用戶的事務(wù),并撤銷正在進(jìn)行的所有未提交的修改;
SAVEPOINT identifier;SAVEPOINT允許在事務(wù)中創(chuàng)建一個(gè)保存點(diǎn),一個(gè)事務(wù)中可以有多個(gè)SAVEPOINT;
RELEASE SAVEPOINT identifier;刪除一個(gè)事務(wù)的保存點(diǎn),當(dāng)沒(méi)有指定的保存點(diǎn)時(shí),執(zhí)行該語(yǔ)句會(huì)拋出一個(gè)異常;
ROLLBACK TO identifier;把事務(wù)回滾到標(biāo)記點(diǎn);
SET TRANSACTION;用來(lái)設(shè)置事務(wù)的隔離級(jí)別。InnoDB存儲(chǔ)引擎提供事務(wù)的隔離級(jí)別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
這些不用你“管”
有的時(shí)候有些SQL語(yǔ)句會(huì)產(chǎn)生一個(gè)隱式的提交操作,即執(zhí)行完成這些語(yǔ)句后,會(huì)有一個(gè)隱式的COMMIT操作。有以下SQL語(yǔ)句,不用你去“管”:
DDL語(yǔ)句,ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等;
修改MYSQL架構(gòu)的語(yǔ)句,CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD;
管理語(yǔ)句,ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等。
以上的這些SQL操作都是隱式的提交操作,不需要手動(dòng)顯式提交。
事務(wù)的隔離級(jí)別
上面也說(shuō)到了SET TRANSACTION用來(lái)設(shè)置事務(wù)的隔離級(jí)別。那事務(wù)的隔離級(jí)別是什么東東?
在數(shù)據(jù)庫(kù)操作中,為了有效保證并發(fā)讀取數(shù)據(jù)的正確性,提出的事務(wù)隔離級(jí)別。
分享:WordPress如何修改Mysql數(shù)據(jù)庫(kù)的表前綴我們知道 WordPress 的數(shù)據(jù)庫(kù)表,可以設(shè)置前綴,默認(rèn)是 wp_,很多同學(xué)也就默認(rèn)用了 wp_,如果某種原因(比如提高安全性)要修改的 WordPress 數(shù)據(jù)的前綴,我們應(yīng)該怎么做? 開(kāi)始之前 修改數(shù)據(jù)是一件風(fēng)險(xiǎn)很高的工作,開(kāi)始之前必然就是做好 數(shù)據(jù)庫(kù)備份 ,也可以 把博客設(shè)置
- 在MySQL中使用GTIDs復(fù)制協(xié)議和中斷協(xié)議的教程
- MySQL獲取所有分類的前N條記錄
- 將MySQL的臨時(shí)目錄建立在內(nèi)存中的教程
- 介紹使用WordPress時(shí)10個(gè)常用的MySQL查詢
- 初步介紹MySQL中的集合操作
- mysql查詢區(qū)分大小寫(xiě)高性能
- WordPress如何修改Mysql數(shù)據(jù)庫(kù)的表前綴
- sqlitestudio怎么用
- MS SQL Server Management Studio Express怎么安裝?
- SQL Server 錯(cuò)誤:15023
- mysql數(shù)據(jù)庫(kù)執(zhí)行SQL導(dǎo)出數(shù)據(jù)方法
- MySQL最常見(jiàn)的操作語(yǔ)句小結(jié)
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- navicat如何連接mysql?navicat連接mysql詳細(xì)圖文教程
- MySQL數(shù)據(jù)庫(kù)InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解
- 安裝SQL server 提示重新啟動(dòng)計(jì)算機(jī)失敗怎么解決?
- 淺析一個(gè)MYSQL語(yǔ)法(在查詢中使用count)的兼容性問(wèn)題
- SQL Server 錯(cuò)誤:15023
- Mysql查看版本號(hào)的五種方式介紹
- 綠色版mysql注冊(cè)卸載服務(wù)方法
- MySQL字段的取值范圍
- 網(wǎng)站數(shù)據(jù)多了分頁(yè)慢該怎么辦?
- SQL查詢超時(shí)的設(shè)置方法(關(guān)于timeout的處理)
猜你也喜歡看這些
- 探討SQL Server中Case 的不同用法
- 恢復(fù)系統(tǒng)數(shù)據(jù)庫(kù)
- 談SQL Server應(yīng)用程序的高級(jí)Sql注入
- 教你SQL Server日志清除的兩種方法
- 解讀SQL2005:一個(gè)很實(shí)用的函數(shù)
- 詳解SQL Server數(shù)據(jù)體系和應(yīng)用程序邏輯
- 淺談在SQL Server2005中進(jìn)行錯(cuò)誤捕捉
- 詳解優(yōu)化SQL Server數(shù)據(jù)庫(kù)的方法
- 淺談SQL將挑戰(zhàn)操作系統(tǒng)安全
- 揭秘SQL Server開(kāi)發(fā)中需要注意的十個(gè)問(wèn)題
- 相關(guān)鏈接:
- 教程說(shuō)明:
MySQL教程-簡(jiǎn)單介紹MySQL中的事務(wù)機(jī)制(2)
。