這是一個兩部分問題。當我在表上執行SELECT時,是在SELECT正在運行時將該表從任何用途上鎖定?我在桌子上執行SELECT時鎖定桌子嗎?
如果是這樣,在執行SELECT語句時不鎖定表的方法是什麼?我正在使用MySQL 4.1.20 MyISAM。
更新這裏有一個類似的問題Any way to select without causing locking in MySQL?但答案不會的MyISAM
這是一個兩部分問題。當我在表上執行SELECT時,是在SELECT正在運行時將該表從任何用途上鎖定?我在桌子上執行SELECT時鎖定桌子嗎?
如果是這樣,在執行SELECT語句時不鎖定表的方法是什麼?我正在使用MySQL 4.1.20 MyISAM。
更新這裏有一個類似的問題Any way to select without causing locking in MySQL?但答案不會的MyISAM
有表鎖定和行鎖定工作。我建議你閱讀數據庫引擎MyISAM with Table Locking和InnoDB Row Locking
想一想:當你做你的選擇時,你是否改變任何表格單元格?如果沒有,則不需要鎖定表,MySQL不需要。表鎖定必須在UPDATE時發生,而不是在SELECT時間。
MyISAM在執行選擇時在表上放置表級讀取鎖,InnoDB應用更多粒度鎖定。但重點是,即使選擇適用於鎖定,但對於某些存儲引擎而言,它依賴於隔離級別。 (和其他數據庫走不同的路線,並使用MVCC進一步避免鎖定) – nos
輕微的切線,但爲什麼你仍然在4.1? –
這是在這裏得到解答之前: [MySQL的NOLOCK quivelant] [1] [1]:http://stackoverflow.com/questions/917640/any-way-to-select-without-causing-locking- in-mysql – Jacque
鎖是邪惡的,通常完全沒有必要。 –