簡單介紹MySQL中的事務機制(2)_MySQL教程
推薦:mysql查詢區分大小寫高性能mysql查詢默認是不區分大小寫的 如: 效果是一樣的。 要讓mysql查詢區分大小寫,可以: 也可以在建表時,加以標識 測試30W數據 不支持索引,查詢效率底下,不建議考慮。上面這些sql語句乍看不會有什么問題,但是當表中的數據多了以后,問題就會凸顯出來,用不到索引,
鏈事務
鏈事務,就是指回滾時,只能恢復到最近一個保存點;而帶有保存點的扁平事務則可以回滾到任意正確的保存點。
嵌套事務
看下面這個,你就能明白了,啥是嵌套事務:
BEGIN WORK
SubTransaction1:
BEGIN WORK
SubOperationX
COMMIT WORK
SubTransaction2:
BEGIN WORK
SubOperationY
COMMIT WORK
...
SubTransactionN:
BEGIN WORK
SubOperationN
COMMIT WORK
COMMIT WORK
這就是嵌套事務,在事務中再嵌套事務,位于根節點的事務稱為頂層事務。事務的前驅稱為父事務,其它事務稱為子事務。事務的前驅稱為父事務,事務的下一層稱為子事務。
子事務既可以提交也可以回滾,但是它的提交操作并不馬上生效,除非由其父事務提交。因此就可以確定,任何子事務都在頂層事務提交后才真正的被提交了。同理,任意一個事務的回滾都會引起它的所有子事務一同回滾。
分布式事務
分布式事務通常是指在一個分布式環境下運行的扁平事務,因此需要根據數據所在位置訪問網絡中的不同節點,比如:通過建設銀行向招商銀行轉賬,建設銀行和招商銀行肯定用的不是同一個數據庫,同時二者的數據庫也不在一個網絡節點上,那么當用戶跨行轉賬,就是通過分布式事務來保證數據的ACID的。
MySQL中使用事務
理論總結的再好,終歸都要通過實踐來進行理解。下面就來說說MySQL中是如何使用事務的。
在MySQL命令行的默認設置下,事務都是自動提交的,即執行SQL語句后就會馬上執行COMMIT操作。因此要顯示地開啟一個事務須使用命令BEGIN或START TRANSACTION,或者執行命令SET AUTOCOMMIT=0,用來禁止使用當前會話的自動提交。
來看看我們可以使用哪些事務控制語句。
BEGIN或START TRANSACTION;顯示地開啟一個事務;
COMMIT;也可以使用COMMIT WORK,不過二者是等價的。COMMIT會提交事務,并使已對數據庫進行的所有修改稱為永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不過二者是等價的。回滾會結束用戶的事務,并撤銷正在進行的所有未提交的修改;
SAVEPOINT identifier;SAVEPOINT允許在事務中創建一個保存點,一個事務中可以有多個SAVEPOINT;
RELEASE SAVEPOINT identifier;刪除一個事務的保存點,當沒有指定的保存點時,執行該語句會拋出一個異常;
ROLLBACK TO identifier;把事務回滾到標記點;
SET TRANSACTION;用來設置事務的隔離級別。InnoDB存儲引擎提供事務的隔離級別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。
這些不用你“管”
有的時候有些SQL語句會產生一個隱式的提交操作,即執行完成這些語句后,會有一個隱式的COMMIT操作。有以下SQL語句,不用你去“管”:
DDL語句,ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等;
修改MYSQL架構的語句,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操作都是隱式的提交操作,不需要手動顯式提交。
事務的隔離級別
上面也說到了SET TRANSACTION用來設置事務的隔離級別。那事務的隔離級別是什么東東?
在數據庫操作中,為了有效保證并發讀取數據的正確性,提出的事務隔離級別。
分享:WordPress如何修改Mysql數據庫的表前綴我們知道 WordPress 的數據庫表,可以設置前綴,默認是 wp_,很多同學也就默認用了 wp_,如果某種原因(比如提高安全性)要修改的 WordPress 數據的前綴,我們應該怎么做? 開始之前 修改數據是一件風險很高的工作,開始之前必然就是做好 數據庫備份 ,也可以 把博客設置
- 相關鏈接:
- 教程說明:
MySQL教程-簡單介紹MySQL中的事務機制(2)
。