mysql鎖分為表級鎖、頁級鎖和行級鎖。
innodb:行級鎖(在特殊情況下會公升級為表級鎖,如給沒有加索引的非唯一字段加鎖,或者在普通索引中,使用模糊查詢使索引失效,導致加鎖時,公升級為表鎖)
myisam:表級鎖
排他鎖又稱為寫鎖,乙個事務在一行資料加上排他鎖後,其他事務不能再在其上加其他的鎖,也修改不了該資料,但是可以直接通過select …from…查詢資料,因為普通查詢沒有任何鎖機制。
在innodb引擎中,開啟事務後,update,delete,insert都會自動給涉及到的資料加上排他鎖,select語句預設不會加任何鎖型別.
加排他鎖可以使用select …for update語句
共享鎖又稱為讀鎖,乙個事務在一行資料加上共享鎖,其他事務可以再給該資料加上共享鎖,但是不能加排他鎖。都可以讀該資料,但是不能修改資料。
加共享鎖可以使用select … lock in share mode語句。
樂觀鎖是抽象的,需要我們自己去實現的。並不是資料庫中自帶的功能。
樂觀鎖是指在更新資料時,樂觀的認為本次操作不會導致衝突。於是在運算元據時,並不進行任何其他的特殊處理(也就是不加鎖)。
實現方式:(該方法可以用來防止庫存超額賣出)
①給資料表加乙個版本(version)字段,
②先查詢出需要進行更新的資料的version值。
③在進行更新操作時,條件(where)語句中匹配查詢出來的version值,並更新versition=version+1.
④如果更新成功,則代表匹配上了version值,即該條資料沒有被其他程序更新過。此時version的值也變成了version+1。
⑤其他同時操作這條資料的程序因為version的值匹配不上,就無法更新該資料。
⑥保證了庫存資料的準確性。
想法悲觀,先給資料先加上鎖,防止其他程序操作該資料。
當多個事務併發執行時,某個事務對資料應用了鎖,則其他事務只能等該事務執行完了,才能進行對該資料進行修改操作。
詳細解釋:
mysql資料庫鎖 MySQL資料庫的鎖機制
在併發訪問情況下,很有可能出現不可重複讀等等讀現象。為了更好的應對高併發,封鎖 時間戳 樂觀併發控制 樂觀鎖 悲觀併發控制 悲觀鎖 都是併發控制採用的主要技術方式。鎖分類 按操作劃分 dml鎖,ddl鎖 按鎖的粒度劃分 表級鎖 行級鎖 頁級鎖 按鎖級別劃分 共享鎖 排他鎖 按加鎖方式劃分 自動鎖 顯...
mysql資料庫鎖
表鎖 讀鎖會阻塞寫,但是不會阻塞讀操作。而寫鎖則會把讀和寫都阻塞 myisam索引結構 myisam索引用的b tree來儲存資料,myisam索引的指標指向的是鍵值的位址,位址儲存的是資料。b tree的資料域儲存的內容為實際資料的位址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實...
mysql資料鎖 mysql資料庫鎖有哪些
mysql資料庫中的鎖有 1 共享鎖,表示對資料進行讀操作 2 排他鎖,表示對資料進行寫操作 3 行鎖,對一行記錄加鎖,只影響一條記錄 4 意向鎖,為了在乙個事務中揭示下一行將要被請求鎖的型別。mysql資料庫鎖 1 共享鎖 shared lock,也叫s鎖 共享鎖 s 表示對資料進行讀操作。因此多...