MySQL事務、鎖以及應用程式(一)

黄舟
發布: 2017-02-06 10:37:26
原創
1439 人瀏覽過

一、事務是什麼

事務是一條或多條資料庫操作語句的組合,具備ACID四個特徵:

  • 原子性(Atomicity)

原子性(Atomicity)
  • 要不全部撤銷。

一致性( Consistency )
  • 資料庫正確地改變狀態後,資料庫的一致性限制並沒有被破壞。

隔離性( Isolation )
  • 事務之間相互獨立,互不干擾。

持續性( Durability )

事務的提交結果,將持久保存在資料庫中。
  • 二、事務並發會產生的問題

    如果在沒有事務隔離的情況下,可能出現:

臟讀取
  • 臟讀是指當一個事務讀取了一條數據,並對數據讀取進行了修改,但是還沒有提交,這時另外一個事務也讀取了這條數據,然後使用了這條數據。如:用戶的帳戶金額是100,T1將其修改為200,但未提交,同時T2讀取到用戶帳戶金額是200,然後T1發生異常回滾,T2讀到的200就是髒數據。

不可重複讀
  • 不可重複讀是指對於數據庫某一條數據,一個事務內多次查詢但是返回了不同的值,這是由於在查詢間隔,被另一個事務修改並提交了。


幻讀

在一個事務的兩次查詢中資料行數不一致。例如一個事務查詢了幾列數據,而另外一個事務在此時插入了新的幾列數據,第一個事務在接下來的查詢中會發現有幾列數據是它之前沒有的,就好像產生幻覺一樣,這就是發生了幻讀。


三、事務隔離等級

事務隔離等級解決了什麼並發問題,還存在什麼並發問題?


1、Read Uncommitted(讀取未提交內容)

這是事務最低的隔離級別,它充許另外一個事務可以看到這個事務未提交的資料。對並發出現的任何問題都無法避免。


2、Read Committed(讀取提交內容)

保證一個事務修改的資料提交後才能被另外一個事務讀取,即另外一個事務不能讀取該事務未提交的資料。可避免髒讀的發生,但會出現不可重複讀、幻讀。


3、Repeatable Read(可重讀)

這是MySQL的預設事務隔離級別,它確保相同交易的多個實例在並發讀取資料時,會看到同樣的資料。可避免髒讀、不可重複讀的發生,但會出現幻讀。


4、Serializable(可串行化)

這是最高的隔離級別,它透過強制事務排序,使其不可能相互衝突。在這個級別,可能導致大量的超時現象和鎖定競爭。可避免髒讀、不可重複讀、幻讀的發生。


下一篇介紹InnoDB引擎的鎖定機制。

🎜以上就是MySQL事務、鎖定以及應用(一)的內容,更多相關內容請關注PHP中文網(www.php.cn)! 🎜🎜🎜🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!