MySQL系列 MyISAM和InnoDB的死鎖

2021-10-09 18:32:53 字數 538 閱讀 7384

容易發生死鎖的幾種情況如下:  

多個併發事務(2個或者以上)按照不同的順序同時訪問多張表

比如乙個程式鎖定了a表,然後去申請鎖定b表,另外乙個程式先鎖定的b表,需要同時修改a表

innodb也支援顯式鎖,例如以下語句:

1)類似的業務邏輯以固定的順序訪問表和行。

2)大事務拆小。大事務更傾向於死鎖,如果業務允許,將大事務拆小。 3)在同乙個事務中,盡可能做到一次鎖定所需要的所有資源,減少死鎖概 率。

4)降低隔離級別,如果業務允許,將隔離級別調低也是較好的選擇

5)為表新增合理的索引。可以看到如果不走索引將會為表的每一行記錄添 加上鎖(或者說是表鎖)

myisam中是不會產生死鎖的,因為myisam總是一次性獲得所需的全部鎖,要麼全部滿足,要麼全部等待。而在innodb中,鎖是逐步獲得的,就造成了死鎖的可能。

當兩個事務同時執行,乙個鎖住了主鍵索引,在等待其

MySQL系列 MyISAM表鎖詳解

s鎖 共享鎖 又稱讀鎖,若事務t對資料物件a加上s鎖,則事務t可以讀a但不能修改a,其他事務只能再對a加s鎖,而不能加x鎖,直到t釋放a上的s鎖。這保證了其他事務可以讀a,但在t釋放a上的s鎖之前不能對a做任何修改,除非先獲取a的x鎖。x鎖 排他鎖 又稱寫鎖,若事務t對資料物件a加上x鎖,事務t可以...

Mysql引擎 Innodb和MyISAM的區別

本文是摘抄其他網文整理而成。create database engine innodb mysql 資料庫分為innodb和myisam兩類。兩者最主要的區別是 innodb支援事務處理 外來鍵和行級鎖.而myisam不支援,所以如果cud比較頻繁或要求事務一致性的,使用innodb比較好,反之使用...

MySQL引擎 InnoDB和MyISAM的區別

mysql 是乙個支援多引擎的系統,主要有以下幾種 而在實際應用中,比較常用的就是innodb和myisam這兩種,但是大多數人都不太清楚兩者的區別,為什麼myisam會被innodb取代?這篇文章就重點討論它們的區別。crash safe簡單來說,就是即使資料庫發生異常重啟,之前提交的記錄也不會丟...