Mysql事務,並發問題,鎖機制

來源:互聯網
上載者:User

標籤:sha   date   inno   操作   層級   let   商務邏輯   開始   表鎖   

什麼是事務(transaction)

    保證成批操作要麼完全執行,要麼完全不執行,維護資料的完整性。也就是要麼成功要麼失敗。
    事務可以是n條sql語句(n>=0)
    不是所有資料庫引擎支援事務,InnoDB引擎支援交易處理

事務四大特性

    原子性(Atomic):事務的所有所有操作要麼全部執行,要麼全部不執行。如果中途出現錯誤不會停止,而是復原到事務前的狀態
    一致性(Consistency):如果事務執行前是一致的,那麼執行後也是一致的,不能破壞關係資料的完整性以及商務邏輯上的一致性,事務按照預期實現。
    隔離性(Isolation):隔離性可以防止多個事務並發時導致資料的不一致
    持久性(Durability):事務執行成功後對資料庫的修改是永久的

事務並發不進行事務隔離

    髒讀:事務A讀到未提交事務B修改的資料,如果此時事務B中途執行失敗復原,那麼此時事務A讀取到的就是髒資料。比如事務A對money進行修改,此時事務B讀取到事務A的更新結果,但是如果後面事務A復原,那麼事務B讀取到的就是髒資料了。
    不可重複讀取:同一個事務中,對同一份資料讀取的結果不一致。事務A在事務B對資料更新前進行讀取,然後事務B更新提交,事務A再次讀取,這時候兩次讀取的資料不同。
    幻讀:同一個事務中,同一個查詢多次返回的結果不一樣。事務B查詢表的記錄數,然後事務A對錶插入一條記錄,接著事務B重新查詢發現記錄數不同。

區別

    髒讀和不可重複讀取:髒讀是事務讀取了還未提交事務的更新資料。不可重複讀取是同一個事務中,幾次讀取的資料不同。
    不可重複讀取和幻讀的區別:都是在同一個事務中,前者是幾次讀取資料不同,後者是幾次讀取資料整體不同。

隔離等級
隔離等級      作用
Serializable(序列化)        避免髒讀、不可重複讀取、幻讀
Repeatable(可重複讀)     避免髒讀、不可重複讀取
Read committed(讀已提交)    避免髒讀
Read uncommitted(讀未提交) none

mysql支援上面4種隔離等級,預設為可重複讀

事務的使用
start transcation;  transcation 事務開始delete from user;   rollback 復原到事務起點savepoint dele;     savepoint 保留復原位置****rollback dele;    rollback point_name 復原到設定的位置commit;         
使用注意點

    如果事務中sql正確運行,後面沒有commit,結果是不會更新到資料庫的,所以需要手動添加commit。
    如果事務中部分sql語句出現錯誤,那麼錯誤語句後面不會執行。而我們可能會認為正確操作會復原撤銷,但是實際上並沒有撤銷正確的操作,此時如果再無錯情況下進行一次commit,之前的正確操作會生效,資料庫會進行更新。

InnoDB引擎的鎖機制

(之所以以InnoDB為主介紹鎖,是因為InnoDB支援事務,支援行鎖和表鎖用的比較多,Myisam不支援事務,只支援表鎖)
  共用鎖定(S):允許一個事務去讀一行,阻止其他事務獲得相同資料集的獨佔鎖定。
  獨佔鎖定(X):允許獲得獨佔鎖定的事務更新資料,阻止其他事務取得相同資料集的共用讀鎖和排他寫鎖。
  意圖共用鎖(IS):事務打算給資料行加行共用鎖定,事務在給一個資料行加共用鎖定前必須先取得該表的IS鎖。
  意向獨佔鎖定(IX):事務打算給資料行加行獨佔鎖定,事務在給一個資料行加獨佔鎖定前必須先取得該表的IX鎖。
說明:
  1)共用鎖定和獨佔鎖定都是行鎖,意圖鎖定都是表鎖,應用中我們只會使用到共用鎖定和獨佔鎖定,意圖鎖定是mysql內部使用的,不需要使用者幹預。
  2)對於UPDATE、DELETE和INSERT語句,InnoDB會自動給涉及資料集加獨佔鎖定(X);對於普通SELECT語句,InnoDB不會加任何鎖,事務可以通過以下語句顯示給記錄集加共用鎖定或獨佔鎖定。
  共用鎖定(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE。
  獨佔鎖定(X):SELECT * FROM table_name WHERE ... FOR UPDATE。
  3)InnoDB行鎖是通過給索引上的索引項目加鎖來實現的,因此InnoDB這種行鎖實現特點意味著:只有通過索引條件檢索資料,InnoDB才使用行級鎖,否則,InnoDB將使用表鎖!。

來源:www.cnblogs.com/-new/p/7239456.html

來源:www.cnblogs.com/fidelQuan/p/4549068.html

Mysql事務,並發問題,鎖機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.