您好,登錄后才能下訂單哦!
本篇內容介紹了“什么是mysql事務”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
事務(Transaction)是由一系列對系統中數據進?訪問與更新的操作所組成的?個程序執行邏輯單元。主要學習一下內容:
(1) 事務的語法 (2) 事務的特性 (3) 事務并發問題 (4) 事務隔離級別 (5) 不同隔離級別的鎖的情況(了解) (6) 隱式提交(了解)
1. begin;start transaction; 2. commit; 使得當前的修改確認 3. rollback; 使得當前的修改被放棄
mysql中使用事務。需要指定存儲引擎為innodedb
事務的原?性是指事務必須是?個原子的操作序列單元。事務中包含的各項操作在事務結束后要么全部執行成功要么全部執行失敗,不可能處于部分成功部分失敗的狀態。事務執?過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發?一樣。也就是說事務是?個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。
事務的一致性是指事務的執?不能破壞數據庫數據的完整性和一致性,一個事務在執?之前和執行之后,數據庫都必須處以?致性狀態。比如:如果從A賬戶轉賬到B賬戶,不可能因為A賬戶扣了錢,?B賬戶沒有加錢。
事務的隔離性是指在并發環境中,并發的事務是互相隔離的。也就是說,不同的事務并發操作相同的數據時,每個事務都有各自完整的數據空間。?個事務內部的操作及使用的數據對其它并發事務是隔離的,并發執行的各個事務是不能互相干擾的。
事務的持久性是指事務?旦提交后,數據庫中的數據必須被永久的保存下來。即使服務器系統崩潰或服務器宕機等故障。只要數據庫重新啟動,那么一定能夠將其恢復到事務成功結束后的狀態。
臟讀:讀取到了沒有提交的數據, 事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的 數據是臟數據。
不可重復讀:同?條命令返回不同的結果集(更新).事務 A 多次讀取同一數據,事務 B 在事務A 多次讀取的過程中,對數據做了更新并提交,導致事務A多次讀取同一數據時,結果不一致。
幻讀:重復查詢的過程中,相同查詢的結果集前后不一致(insert, delete)。
4種事務隔離級別從上往下,級別越高,并發性越差,安全性就越來越高。 ?般數據默認級別是 讀以提交或可重復讀。
讀未提交(READ_UNCOMMITTED)
讀未提交,該隔離級別允許臟讀取,其隔離級別是最低的。換句話說,如果一個事務正在處理理某一數據,并對其進?了更新,但同時尚未完成事務,因此還沒有提交事務;而以此同時,允許另一個事務也能夠訪問該數據。
讀已提交(READ_COMMITTED)
讀已提交是不同的事務執行的時候只能獲取到已經提交的數據。 這樣就不會出現上面的臟讀的情況了。但是在同一個事務中執行同一個讀取,結果不一致。讀已提交解決了臟讀問題,但是還是解決不了可重復讀問題。
可重復讀(REPEATABLE_READ)
可重復讀就是保證在事務處理理過程中,多次讀取同一個數據時,該數據的值和事務開始時刻是一致的。因此該事務級別解決了不可重復讀和臟讀,但是有可能出現幻讀的數據。幻讀就是指同樣的查詢語句,前后連個時間點內查詢的結果集不一致。
可序列化(SERIALIZABLE)
順序讀是最嚴格的事務隔離級別。它要求所有的事務排隊順序執?行行,即事務只能一個接一個地處理,不能并發。
讀未提交(RU): 有行級的鎖,沒有間隙鎖。它與RC的區別是能夠查詢到未提交的數據。
讀已提交(RC):有行級的鎖,沒有間隙鎖,讀不到沒有提交的數據。
可重復讀(RR):有行級的鎖,也有間隙鎖,每次讀取的數據都是一樣的,并且沒有幻讀的情況。
序列化(S):有行級鎖,也有間隙鎖,讀表的時候,就已經上鎖了
“什么是mysql事務”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。