MySQL的表鎖定代碼是不會死鎖的。 MySQL使用表級鎖定(而不是行級鎖定或列級鎖定)以達到很高的鎖定速度。對于大表,表級鎖定對大多數應用程序來說比行級鎖定好一些,但是當然有一些缺陷。 在MySQL3.23.7和更高版本中,一個人能把行插入到MyISAM表同時其他線程正在讀該表。注意,目前只有在表中內有刪除的行時才工作。 表級鎖定使很多線程能夠同時讀一個表,但是如果一個線程想要寫一個表,它必須首先得到獨占存取權。在更改期間,所有其他想要存取該特定表的線程將等到更改就緒。 因為數據庫的更改通常被視為比SELECT更重要,更新一個表的所有語句比從一個表中檢索信息的語句有更高的優先級。這應該保証更改不被“餓死”,因為一個人針對一個特定表會發出很多繁重的查詢。 從MySQL 3.23.7開始,一個人可以能使用max_write_lock_count變量強制MySQL在一個表上一個特定數量的插入後發出一個SELECT。 對此一個主要的問題如下: 一個客戶發出一個花很長時間運行的SELECT。 
然後其他客戶在一個使用的表上發出一個UPDATE;這個客戶將等待直到SELECT完成。 
另一個客戶在同一個表上發出另一個SELECT語句;因為UPDATE比SELECT有更高的優先級,該SELECT將等待UPDATE的完成。它也將等待第一個SELECT完成! 
對這個問題的一些可能的解決方案是: 試著使SELECT語句運行得更快;你可能必須創建一些摘要(summary)表做到這點。 
用--low-priority-updates啟動mysqld。這將給所有更新(修改)一個表的語句以比SELECT語句低的優先級。在這種情況下,在先前情形的最後的SELECT語句將在INSERT語句前執行。 
你可以用LOW_PRIORITY屬性給與一個特定的INSERT、UPDATE或DELETE語句較低優先級。 
為max_write_lock_count指定一個低值來啟動mysqld使得在一定數量的WRITE鎖定後給出READ鎖定。 
通過使用SQL命令:SET SQL_LOW_PRIORITY_UPDATES=1,你可從一個特定線程指定所有的更改應該由用低優先級完成。見7.25 SET OPTION句法。 
你可以用HIGH_PRIORITY屬性指明一個特定SELECT是很重要的。見7.12 SELECT句法。 
如果你有關于INSERT結合SELECT的問題,切換到使用新的MyISAM表,因為它們支持並發的SELECT和INSERT。 
如果你主要混合INSERT和SELECT語句,DELAYED屬性的INSERT將可能解決你的問題。見7.14 INSERT句法。 
如果你有關于SELECT和DELETE的問題,LIMIT選項的DELETE可以幫助你。見7.11 DELETE句法。