溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是mysql事務

發(fā)布時間:2021-06-24 14:49:56 來源:億速云 閱讀:175 作者:chen 欄目:編程語言

本篇內容介紹了“什么是mysql事務”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

第一章 事務

事務(Transaction)是由一系列對系統(tǒng)中數(shù)據(jù)進?訪問與更新的操作所組成的?個程序執(zhí)行邏輯單元。主要學習一下內容:

(1) 事務的語法 
(2) 事務的特性
(3) 事務并發(fā)問題 
(4) 事務隔離級別
(5) 不同隔離級別的鎖的情況(了解) 
(6) 隱式提交(了解)

1.1 事務的語法

1. begin;start transaction;
2. commit; 使得當前的修改確認
3. rollback; 使得當前的修改被放棄

mysql中使用事務。需要指定存儲引擎為innodedb

1.2 事務的ACID特性

1.2.1原?性(Atomicity)

事務的原?性是指事務必須是?個原子的操作序列單元。事務中包含的各項操作在事務結束后要么全部執(zhí)行成功要么全部執(zhí)行失敗,不可能處于部分成功部分失敗的狀態(tài)。事務執(zhí)?過程中出錯,會回滾到事務開始前的狀態(tài),所有的操作就像沒有發(fā)?一樣。也就是說事務是?個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。

1.2.2?致性(Consistency)

事務的一致性是指事務的執(zhí)?不能破壞數(shù)據(jù)庫數(shù)據(jù)的完整性和一致性,一個事務在執(zhí)?之前和執(zhí)行之后,數(shù)據(jù)庫都必須處以?致性狀態(tài)。比如:如果從A賬戶轉賬到B賬戶,不可能因為A賬戶扣了錢,?B賬戶沒有加錢。

1.2.3隔離性(Isolation)

事務的隔離性是指在并發(fā)環(huán)境中,并發(fā)的事務是互相隔離的。也就是說,不同的事務并發(fā)操作相同的數(shù)據(jù)時,每個事務都有各自完整的數(shù)據(jù)空間。?個事務內部的操作及使用的數(shù)據(jù)對其它并發(fā)事務是隔離的,并發(fā)執(zhí)行的各個事務是不能互相干擾的。

1.2.4持久性(Duration)

事務的持久性是指事務?旦提交后,數(shù)據(jù)庫中的數(shù)據(jù)必須被永久的保存下來。即使服務器系統(tǒng)崩潰或服務器宕機等故障。只要數(shù)據(jù)庫重新啟動,那么一定能夠將其恢復到事務成功結束后的狀態(tài)。

1.3 事務的并發(fā)問題

  • 臟讀:讀取到了沒有提交的數(shù)據(jù), 事務A讀取了事務B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的 數(shù)據(jù)是臟數(shù)據(jù)。

  • 不可重復讀:同?條命令返回不同的結果集(更新).事務 A 多次讀取同一數(shù)據(jù),事務 B 在事務A 多次讀取的過程中,對數(shù)據(jù)做了更新并提交,導致事務A多次讀取同一數(shù)據(jù)時,結果不一致。

  • 幻讀:重復查詢的過程中,相同查詢的結果集前后不一致(insert, delete)。

1.4 事務隔離級別

4種事務隔離級別從上往下,級別越高,并發(fā)性越差,安全性就越來越高。 ?般數(shù)據(jù)默認級別是 讀以提交或可重復讀。

  1. 讀未提交(READ_UNCOMMITTED)

    讀未提交,該隔離級別允許臟讀取,其隔離級別是最低的。換句話說,如果一個事務正在處理理某一數(shù)據(jù),并對其進?了更新,但同時尚未完成事務,因此還沒有提交事務;而以此同時,允許另一個事務也能夠訪問該數(shù)據(jù)。

  2. 讀已提交(READ_COMMITTED)

    讀已提交是不同的事務執(zhí)行的時候只能獲取到已經(jīng)提交的數(shù)據(jù)。 這樣就不會出現(xiàn)上面的臟讀的情況了。但是在同一個事務中執(zhí)行同一個讀取,結果不一致。讀已提交解決了臟讀問題,但是還是解決不了可重復讀問題。

  3. 可重復讀(REPEATABLE_READ)

    可重復讀就是保證在事務處理理過程中,多次讀取同一個數(shù)據(jù)時,該數(shù)據(jù)的值和事務開始時刻是一致的。因此該事務級別解決了不可重復讀和臟讀,但是有可能出現(xiàn)幻讀的數(shù)據(jù)?;米x就是指同樣的查詢語句,前后連個時間點內查詢的結果集不一致。

  4. 可序列化(SERIALIZABLE)

    順序讀是最嚴格的事務隔離級別。它要求所有的事務排隊順序執(zhí)?行行,即事務只能一個接一個地處理,不能并發(fā)。

1.5 不同的隔離級別的鎖的情況

  1. 讀未提交(RU): 有行級的鎖,沒有間隙鎖。它與RC的區(qū)別是能夠查詢到未提交的數(shù)據(jù)。

  2. 讀已提交(RC):有行級的鎖,沒有間隙鎖,讀不到?jīng)]有提交的數(shù)據(jù)。

  3. 可重復讀(RR):有行級的鎖,也有間隙鎖,每次讀取的數(shù)據(jù)都是一樣的,并且沒有幻讀的情況。

  4. 序列化(S):有行級鎖,也有間隙鎖,讀表的時候,就已經(jīng)上鎖了

“什么是mysql事務”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI