簡單介紹MySQL中的事務(wù)機制(2)_MySQL教程
推薦:mysql查詢區(qū)分大小寫高性能mysql查詢默認(rèn)是不區(qū)分大小寫的 如: 效果是一樣的。 要讓mysql查詢區(qū)分大小寫,可以: 也可以在建表時,加以標(biāo)識 測試30W數(shù)據(jù) 不支持索引,查詢效率底下,不建議考慮。上面這些sql語句乍看不會有什么問題,但是當(dāng)表中的數(shù)據(jù)多了以后,問題就會凸顯出來,用不到索引,
鏈?zhǔn)聞?wù)
鏈?zhǔn)聞?wù),就是指回滾時,只能恢復(fù)到最近一個保存點;而帶有保存點的扁平事務(wù)則可以回滾到任意正確的保存點。
嵌套事務(wù)
看下面這個,你就能明白了,啥是嵌套事務(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é)點的事務(wù)稱為頂層事務(wù)。事務(wù)的前驅(qū)稱為父事務(wù),其它事務(wù)稱為子事務(wù)。事務(wù)的前驅(qū)稱為父事務(wù),事務(wù)的下一層稱為子事務(wù)。
子事務(wù)既可以提交也可以回滾,但是它的提交操作并不馬上生效,除非由其父事務(wù)提交。因此就可以確定,任何子事務(wù)都在頂層事務(wù)提交后才真正的被提交了。同理,任意一個事務(wù)的回滾都會引起它的所有子事務(wù)一同回滾。
分布式事務(wù)
分布式事務(wù)通常是指在一個分布式環(huán)境下運行的扁平事務(wù),因此需要根據(jù)數(shù)據(jù)所在位置訪問網(wǎng)絡(luò)中的不同節(jié)點,比如:通過建設(shè)銀行向招商銀行轉(zhuǎn)賬,建設(shè)銀行和招商銀行肯定用的不是同一個數(shù)據(jù)庫,同時二者的數(shù)據(jù)庫也不在一個網(wǎng)絡(luò)節(jié)點上,那么當(dāng)用戶跨行轉(zhuǎn)賬,就是通過分布式事務(wù)來保證數(shù)據(jù)的ACID的。
MySQL中使用事務(wù)
理論總結(jié)的再好,終歸都要通過實踐來進行理解。下面就來說說MySQL中是如何使用事務(wù)的。
在MySQL命令行的默認(rèn)設(shè)置下,事務(wù)都是自動提交的,即執(zhí)行SQL語句后就會馬上執(zhí)行COMMIT操作。因此要顯示地開啟一個事務(wù)須使用命令BEGIN或START TRANSACTION,或者執(zhí)行命令SET AUTOCOMMIT=0,用來禁止使用當(dāng)前會話的自動提交。
來看看我們可以使用哪些事務(wù)控制語句。
BEGIN或START TRANSACTION;顯示地開啟一個事務(wù);
COMMIT;也可以使用COMMIT WORK,不過二者是等價的。COMMIT會提交事務(wù),并使已對數(shù)據(jù)庫進行的所有修改稱為永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不過二者是等價的。回滾會結(jié)束用戶的事務(wù),并撤銷正在進行的所有未提交的修改;
SAVEPOINT identifier;SAVEPOINT允許在事務(wù)中創(chuàng)建一個保存點,一個事務(wù)中可以有多個SAVEPOINT;
RELEASE SAVEPOINT identifier;刪除一個事務(wù)的保存點,當(dāng)沒有指定的保存點時,執(zhí)行該語句會拋出一個異常;
ROLLBACK TO identifier;把事務(wù)回滾到標(biāo)記點;
SET TRANSACTION;用來設(shè)置事務(wù)的隔離級別。InnoDB存儲引擎提供事務(wù)的隔離級別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
這些不用你“管”
有的時候有些SQL語句會產(chǎn)生一個隱式的提交操作,即執(zhí)行完成這些語句后,會有一個隱式的COMMIT操作。有以下SQL語句,不用你去“管”:
DDL語句,ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等;
修改MYSQL架構(gòu)的語句,CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD;
管理語句,ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等。
以上的這些SQL操作都是隱式的提交操作,不需要手動顯式提交。
事務(wù)的隔離級別
上面也說到了SET TRANSACTION用來設(shè)置事務(wù)的隔離級別。那事務(wù)的隔離級別是什么東東?
在數(shù)據(jù)庫操作中,為了有效保證并發(fā)讀取數(shù)據(jù)的正確性,提出的事務(wù)隔離級別。
分享:WordPress如何修改Mysql數(shù)據(jù)庫的表前綴我們知道 WordPress 的數(shù)據(jù)庫表,可以設(shè)置前綴,默認(rèn)是 wp_,很多同學(xué)也就默認(rèn)用了 wp_,如果某種原因(比如提高安全性)要修改的 WordPress 數(shù)據(jù)的前綴,我們應(yīng)該怎么做? 開始之前 修改數(shù)據(jù)是一件風(fēng)險很高的工作,開始之前必然就是做好 數(shù)據(jù)庫備份 ,也可以 把博客設(shè)置
- 在MySQL中使用GTIDs復(fù)制協(xié)議和中斷協(xié)議的教程
- MySQL獲取所有分類的前N條記錄
- 將MySQL的臨時目錄建立在內(nèi)存中的教程
- 介紹使用WordPress時10個常用的MySQL查詢
- 初步介紹MySQL中的集合操作
- mysql查詢區(qū)分大小寫高性能
- WordPress如何修改Mysql數(shù)據(jù)庫的表前綴
- sqlitestudio怎么用
- MS SQL Server Management Studio Express怎么安裝?
- SQL Server 錯誤:15023
- mysql數(shù)據(jù)庫執(zhí)行SQL導(dǎo)出數(shù)據(jù)方法
- MySQL最常見的操作語句小結(jié)
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-簡單介紹MySQL中的事務(wù)機制(2)
。