MYSQL中鎖的理解

  1. ** 鎖是幹嘛的?**
    是爲了保證數據庫當中數據的一致性,併發情況下事務操作經常會發生對同一條數據進行操作,導致我們讀寫發生異常。
    有以下幾種情況:
    髒寫(寫寫操作):A修改了數據,B也修改了數據,B回滾,那個A的修改也不能生效。這種情況很嚴重,基本任何事務隔離級別都會杜絕這種情況
    髒讀(寫讀):B開啓事務,修改改了一條數據,然後A去讀取,之後B又回滾(rollback)了,那麼A讀了就是錯誤的數據。
    不可重複讀(讀寫讀):A讀到了ID=1的數據,比如是張飛,B修改數據爲劉備,A在讀一次ID=1的數據,這時數據爲劉備了,這叫不可重複讀。
    幻讀:A取了一個數據集,比如ID>1,這時有2條數據,B往這張表添加了一條數據,這時A再讀,就有3條,這種現象叫做幻讀。
    鎖就是爲了保證數據正確讀寫的一種手段。

  2. 有哪幾種鎖
    主要有表級鎖,行級鎖,頁鎖,我們一般用到行級鎖
    表級鎖:
    比如,MyISAM就是表級鎖,最大的特徵就是寫的優先級大於讀,當一個進程進行寫操作,會阻塞其他進程。所以MyISAM併發比較差。
    行級鎖:innodb,有共享鎖和排它鎖。意向排它鎖,意向共享鎖。行級鎖只能作用於索引上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章