0
爲什麼mysql在選擇數據時向myisam引擎表添加讀鎖?爲什麼mysql在選擇數據時向myisam引擎表添加讀鎖?
在官方手冊中,只提到innodb具有默認的隔離。並且我們知道myisam引擎不支持事務。但爲什麼mysql會在選擇表中添加讀鎖?
爲什麼mysql在選擇數據時向myisam引擎表添加讀鎖?爲什麼mysql在選擇數據時向myisam引擎表添加讀鎖?
在官方手冊中,只提到innodb具有默認的隔離。並且我們知道myisam引擎不支持事務。但爲什麼mysql會在選擇表中添加讀鎖?
如果在查詢讀取表時修改了表,則讀取查詢可能會返回不正確的結果。爲防止出現這種情況,MyISAM使用鎖*來防止其他線程從該表中讀取時寫入表。這個鎖並不妨礙其他讀取查詢,但是 - 任何數量的線程都可以共享該鎖。
查詢寫入它們時,表也被鎖定。這使用不同類型的鎖來防止在該表上發生任何其他寫入或讀取。
Thanks.But我無法找到正式手冊上的讀鎖(當查詢數據時)的信息。它是一個SQL標準嗎? – macc
SQL標準並不討論實現的怪癖,就像MyISAM需要表鎖來實現其黑暗魔法一樣。老實說,MyISAM實際上並不值得使用,因爲這樣的事情,它是一個足以滿足MySQL 1.0的引擎,但已經過時了現代標準。儘可能使用InnoDB。它支持事務處理,在服務器崩潰的情況下可以安全地回滾日誌等等。 – tadman
嗯,你的意思是我們找不到關於myisam讀鎖的官方上下文(即使myisam引擎的信息很少)。我應該放棄使用myisam引擎。 – macc