MySQL InnoDB引擎的行鎖和表鎖

2022-02-17 12:43:59 字數 609 閱讀 9378

1.行鎖和表鎖

在mysql 的 innodb引擎支援行鎖,與oracle不同,mysql的行鎖是通過索引載入的,即是行鎖是加在索引響應的行上的,要是對應的sql語句沒有走索引,則會全表掃瞄,

行鎖則無法實現,取而代之的是表鎖。

2.連表鎖機制

在連表操作中,雙方表選中的所以行當中一旦有一條在鎖定中,則整個查詢會被阻塞。

3.死鎖

假如有記錄1和2,當兩個並行的事務a和b,a修改了記錄1,而b修改了記錄2,兩個事物均未提交的情況下,a想接著修改記錄2,而b想接著修改記錄1,雙方都等待著自己要修改的記錄鎖釋放,結果是雙方都會陷入無限阻塞中,

形成死鎖,不過由於mysql的異常機制導致後提交的mysql程序(也就是觸發死鎖的程序)會丟擲錯誤:[err] 1213 - deadlock found when trying to get lock; try restarting transaction,因為一方丟擲異常釋放了鎖定結束了,而另外乙個程序則無感知,可以正常提交事務。

4.事件隔離級別

mysql innodb的預設事件隔離級別是"repeatable read",未提交的事務,修改是不被體現在沒加鎖的查詢上的,如果對資料一致性要求很高的查詢,建議加上共享鎖。

(mysql)Innodb引擎行鎖學習

mysql常用引擎有myisam和innodb,而innodb是mysql預設的引擎。myisam不支援行鎖,而innodb支援行鎖和表鎖 innodb的行鎖是加在響應的索引上的,即sql語句中有索引,如果沒有就是全表掃瞄,即表鎖 表鎖 不會死鎖,索衝突機率高,併發低 行鎖 會發生死索,索衝突機率低...

MySQL InnoDB引擎資料儲存行格式

mysql基本儲存單元是頁,是伺服器與磁碟互動的最小單位,預設大小16k,檢視頁大小 show variables like innodb page size 16384 頁中儲存著多行資料,innodb引擎資料的儲存格式也就是行格式有四種 compactredundantdynamiccompre...

mysql InnoDB引擎的行鎖和表鎖

之前是有接觸行鎖和表鎖但是由於沒有實際應用過也只是大概了解,前兩天就遇到了併發同時對一條記錄進行修改。mysql肯定會讓修改請求排隊,也就是說加了鎖,但是mysql預設加的是表鎖,但是會影響效率,所以我們需要用行鎖。表鎖 顧名思義就是對整張表進行加鎖,同一時刻整張表所有記錄都被霸佔,雖然不會出現死鎖...