MySQL的表鎖 行鎖及事務處理的機制

2021-09-25 18:34:49 字數 691 閱讀 3486

一、常見mysql引擎對鎖的支援

myisam:不支援事務,僅實現表鎖。

innodb:支援事務,實現表鎖和行鎖。對於update、delete和insert語句,innodb會自動給涉及的資料集加排它鎖;而對於普通select語句,innodb不會加任何鎖,當然我們也可以顯示的為select加鎖,如select * from tablename where ...  for update。

表鎖雖然開銷小,鎖表快,但高併發下效能低。

行鎖雖然開銷大,鎖表慢,但高併發下相比之下效能更高。

事務和行鎖,都是在確保資料準確的基礎上,提高併發的處理能力。

多個事務(包括行鎖)操作同一行資料時,後來的事務處於阻塞等待狀態,這樣可以避免了髒讀等資料一致性的問題。後來的事務(包括行鎖)可以操作其他行資料,解決了表鎖高併發效能低的問題。

二、innodb行鎖的內部機制

innodb的行鎖,是針對索引加的鎖,不是針對記錄加的鎖。行鎖的內部機制為:

(1)當使用索引列條件時的修改,即update ... where index_column 時,加行鎖,否則公升級為加表鎖。

(2)當更新一張較大表的大部分甚至全部的資料時,即使將索引作為檢索條件,mysql仍會將行鎖公升級為表鎖。

三、事務的特點

參考:

mysql事務處理和鎖機制

1.3.如何避免鎖的資源競爭 1 讓 select 速度盡量快,這可能需要建立一些摘要表。2 啟動 mysqld 時使用引數 low priority updates 這就會讓更新操作的優先順序低於 select 這種情況下,在上面的假設中,第二個 select 就會在 insert 之前執行了,而...

mysql事物鎖鎖表 mysql 事務 行鎖 表鎖

一 準備 select from information schema.innodb trx 查詢事務 select from information schema.innodb locks 查詢鎖 select from information schema.innodb lock waits 暫...

mysql塊鎖 mysql事務 表鎖 行鎖

mysql 使用select for update 做事務寫入前的確認 以mysql 的innodb 為例,預設的tansaction isolation level 為repeatable read,在select 的讀取鎖定主要分為兩種方式 select lock in share modese...