鎖失效 MySQL鎖機制 4 索引失效行鎖變表鎖

2021-10-12 21:11:51 字數 861 閱讀 1142

前面說過mysql的行鎖,以及案例,下面來說一下什麼情況下會導致行鎖變成表鎖。

首先我們知道如果索引失效的情況下,那麼肯定會導致索引失效,但是如果使用不當,會導致行鎖變成表鎖。

上文中資料庫的儲存引擎為innodb,並且關閉了自動提交,在建立表的時候建立了兩個索引,分別在表中的a和b欄位上建立了兩個單值索引。如下

來看一下表資訊

其中,a為int型,b為varchar型

上文中說過,兩個會話去執行不同的記錄各不相干不會導致阻塞狀態。

再講索引優化的時候說過「var引號不能丟」,如果丟失,會導致索引失效。現在來模擬一下這種情況,上面說過b欄位是varchar型,故意把他寫錯不加單引號

mysql底層是做了型別轉換的,但是由於「b」列是做了索引的的一列,自動做了型別轉換之後導致型別失效,此時在會話1中修改之後,自己自娛自樂了一番,完全不管會話2受得了受不了發生了阻塞。此時執行commit

這種情況就是乙個不小心,var沒有加引號,導致索引失效,行鎖邊表鎖

mysql鎖機制 mysql 鎖機制

一 概述 mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row level locking 也...

MySQL索引與鎖的機制 五 鎖

一般情況下,沒有用鎖。資料庫隱式加了 表鎖 對整個表 加鎖,開銷小,加鎖快 不會出現死鎖,鎖定粒度大 發生鎖衝突概率高,併發度底 表鎖分兩種 行鎖 對 某一行 加鎖,開銷大,加鎖慢,會出現死鎖 鎖定 粒度小 發生鎖衝突的概率底,併發度高 innodb 支援行鎖 和 表鎖,其中行鎖是 基於索引 的,只...

mysql鎖機制 php Mysql鎖機制

表級鎖 開銷小,加鎖快 不會出現死鎖 鎖定粒度大,發生鎖衝突的概率最高,併發度最低。行級鎖 開銷大,加鎖慢 會出現死鎖 鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。共享鎖和排它鎖 頁面鎖 開銷和加鎖時間界於表鎖和行鎖之間 會出現死鎖 鎖定粒度界於表鎖和行鎖之間,併發度一般 mysql的行級鎖有...