mysql資料庫中的鎖有:1、共享鎖,表示對資料進行讀操作;2、排他鎖,表示對資料進行寫操作;3、行鎖,對一行記錄加鎖,只影響一條記錄;4、意向鎖,為了在乙個事務中揭示下一行將要被請求鎖的型別。
mysql資料庫鎖
1、共享鎖(shared lock,也叫s鎖)
共享鎖(s)表示對資料進行讀操作。因此多個事務可以同時為乙個物件加共享鎖。
產生共享鎖的sql語句:select * from ad_plan lock in share mode;
2、排他鎖(exclusive lock,也叫x鎖)
排他鎖表示對資料進行寫操作。如果乙個事務對物件加了排他鎖,其他事務就不能再給它加任何鎖了。
產生排他鎖的sql語句:select * from ad_plan for update;
3、行鎖(row lock)
對一行記錄加鎖,只影響一條記錄。
通常用在dml語句中,如insert, update, delete等。
innodb行鎖是通過給索引上的索引項加鎖來實現的,這一點mysql與oracle不同,後者是通過在資料塊中對相應資料行加鎖來實現的。
innodb這種行鎖實現特點意味著:只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖!
4、意向鎖
意向共享鎖(is):表示事務準備給資料行加入共享鎖,也就是說乙個資料行加共享鎖前必須先取得該錶的is鎖;
意向排他鎖(ix):類似上面,表示事務準備給資料行加入排他鎖,說明事務在乙個資料行加排他鎖前必須先取得該錶的ix鎖。
意向鎖是 innodb 自動加的,不需要使用者干預。
對於insert、update和delete,innodb 會自動給涉及的資料加排他鎖;對於一般的select語句,innodb 不會加任何鎖,事務可以通過以下語句顯式加共享鎖或排他鎖。
共享鎖:select … lock in share mode;
排他鎖:select … for update;
鎖的級別
根據鎖的級別或密度來劃分,mysql有三種鎖的級別:頁級、表級、行級。
(1)表級鎖
開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。
(2)行級鎖
開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。
(3)頁面鎖
開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。
mysql資料庫鎖 MySQL資料庫的鎖機制
在併發訪問情況下,很有可能出現不可重複讀等等讀現象。為了更好的應對高併發,封鎖 時間戳 樂觀併發控制 樂觀鎖 悲觀併發控制 悲觀鎖 都是併發控制採用的主要技術方式。鎖分類 按操作劃分 dml鎖,ddl鎖 按鎖的粒度劃分 表級鎖 行級鎖 頁級鎖 按鎖級別劃分 共享鎖 排他鎖 按加鎖方式劃分 自動鎖 顯...
mysql資料庫鎖
表鎖 讀鎖會阻塞寫,但是不會阻塞讀操作。而寫鎖則會把讀和寫都阻塞 myisam索引結構 myisam索引用的b tree來儲存資料,myisam索引的指標指向的是鍵值的位址,位址儲存的是資料。b tree的資料域儲存的內容為實際資料的位址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實...
MySQL資料庫鎖
mysql鎖分為表級鎖 頁級鎖和行級鎖。innodb 行級鎖 在特殊情況下會公升級為表級鎖,如給沒有加索引的非唯一字段加鎖,或者在普通索引中,使用模糊查詢使索引失效,導致加鎖時,公升級為表鎖 myisam 表級鎖 排他鎖又稱為寫鎖,乙個事務在一行資料加上排他鎖後,其他事務不能再在其上加其他的鎖,也修...