讓我們說我有兩個用戶試圖按照以下順序訪問名爲「comments」的數據庫中的一個表:澄清InnoDB引擎中的行級鎖定與MySQL數據庫中的MyISAM引擎中的表級鎖定之間的區別
用戶1製作和更新使用id = 10
UPDATE評論SET評論= 「Hello World」 的記錄WHERE ID = 10
用戶2正在作出選擇的所有行同一張桌子評論
SELECT * FROM評論
我想討論的下列情況的區別是:
- 如果表的引擎是MyISAM數據:更新查詢將鎖定 整個表,將排隊選擇查詢,直到 更新該行完成,然後它將被執行,這將停止任何 用戶詢問該表中的任何內容,直到更新爲 完成。
- 如果表的引擎是InnoDB:更新查詢將鎖定更新的行。
我想知道這個鎖如何影響選擇查詢?
我的意思是,如果select請求數據庫中的評論表的整個記錄,並發現其中一個(id = 10)被鎖定,數據庫再次排隊select查詢,直到更新完成?
如果是,那麼兩個引擎之間有什麼區別?
如果不是,我想說我在我的網站上面有同樣的情況,甚至我改變了我的表引擎從MyISAM到InnoDB,但是仍然發生更新或插入查詢時排隊請求的問題。
對這種情況的任何解釋都會很有幫助。提前致謝
在您的示例中,select必須等待更新才能完成兩個引擎。如果選擇查詢不包含ID爲10的記錄(被更新鎖定),這種情況會有所不同,在這種情況下,MyISAM select必須等待,但InnoDB不會。 「InnoDB中的這個特性被稱爲併發性」 - http://stackoverflow.com/a/28070969/934739 –