建設銀行網(wǎng)站維修圖片做營銷策劃的公司
文章目錄
- MySQL事務
- 事務的四個特性 ACID
- 事務提交的類型
- 事務的使用
MySQL事務
事務是什么?
事務就是一組邏輯操作單元,是數(shù)據(jù)從一種狀態(tài)變成另外一種狀態(tài)。整個單元有一個或多個SQL語句構成,在這個操作單元中,每一個SQL語句相互依賴、不可分割,是一個整體。
事務處理(事務操作)?
保證所有的事務都作為一個工作單元來執(zhí)行,即使出現(xiàn)了故障,都不要改變這種執(zhí)行方式。但在一個事務中執(zhí)行多個操作時,要么整個事務被commit,那樣這些修改就會保存下來;要么數(shù)據(jù)庫管理系統(tǒng)將放棄所有的修改,整個事務rollback到最初的狀態(tài)
這個操作其實是為了確保數(shù)據(jù)的一致性,這樣不論這個被commit還是rollback,都可以做到讓數(shù)據(jù)庫從一個一致性狀態(tài)變換到另一個一致性狀態(tài)。
事務的四個特性 ACID
事務是由一組SQL語句組成的邏輯處理單元,它的ACID特性如下:
- 原子性(Atomicity):原子性是指事務是一個不可分割的單位,事務中的操作要么都發(fā)生,要么都不發(fā)生。
- 一致性(Consistency):事務必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另外一個一致性狀態(tài)。
- 隔離性(lsolation):事務的隔離性是指多個用戶并發(fā)訪問數(shù)據(jù)庫時,數(shù)據(jù)庫為每一個用戶開啟的事務,不能被其他事務操作的數(shù)據(jù)所干擾,多個并發(fā)事務之間要相互隔離。
- 持久性(Durability):持久性是指一個事務一旦被commit,他對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久的,接下的其他操作或故障不應對其有任何影響。
事務提交的類型
-
*隱式提交:*即無需顯示執(zhí)行commit語句,session中的操作被自動提交到數(shù)據(jù)庫的過程。
-
*自動提交:*若把AUTOCOMMIT設置為ON,則在插入、修改、刪除語句執(zhí)行后,
系統(tǒng)將自動進行提交,這就是自動提交。set autocommit on;
-
顯式提交:用COMMIT命令直接完成的提交為顯式提交。
commit;
隱式提交的方式?
- 正常執(zhí)行完DDL語句。包括create,alter,drop,truncate,rename。
- 正常執(zhí)行完DCL語句。包括grant,revoke。
- 正常退出數(shù)據(jù)庫管理軟件,沒有明確發(fā)出commit或者rollback。
其實在執(zhí)行DDL語句時,前面的DML操作也會被提交到數(shù)據(jù)庫中,因為是在一個session里,那執(zhí)行ddl語句的時候前面的dml語句也會被提交到庫中。即使DDL語句執(zhí)行失敗,前面的DML操作也會被提交到數(shù)據(jù)庫中,
DDL都執(zhí)行失敗了,怎么還會提交呢?這就需要探究一下隱式提交的本質了,為了避免隱式提交或者回滾,盡量保證一條或者幾條DML操作完成后有顯示的提交或者回滾,防止后續(xù)執(zhí)行的DCL或者DDL自動提交前期的DML操作。
隱式提交的本質:
一條DDL語句執(zhí)行了兩次commit
commit; —將當前session中未提交的事務隱式提交,以保證DDL語句失敗時的回滾位置
DDL statement;
commit; —將DDL操作提交
事務的使用
begin/start transaction
開啟事務- 編寫事務中的sql語句
commit
rollback
結束事務:提交或回滾