2011-05-20 39 views
1

我們使用的是MySQL在我們的應用程序合併觀點考慮,並在文檔中遇到下列令人費解的語言來:鎖定MySQL視圖的行爲?

一個理由去選擇不是Temptable明確的是,鎖可以對底層表的臨時後釋放表已創建並在用於完成處理語句之前。這可能會導致比MERGE算法更快的鎖定釋放,以便其他使用該視圖的客戶端不會長時間阻塞。

我讀到這的方式是合併視圖上的選擇取出讀鎖,但這看起來不正確。兩個客戶可以同時從視圖中讀取表格嗎?

謝謝!

回答

0

我讀到它的方式是,雖然它取出一個鎖(它必須讀取數據,對吧?),它會建立一個TEMPTABLE,然後釋放鎖。之後的任何工作都可以在沒有鎖的情況下完成,因此其他客戶可以在底層表上享受樂趣。

讀取鎖定可能會以更快的速度釋放。

+0

我想我的具體問題是這樣的:「兩個客戶端可以同時從一個視圖中讀取表格嗎?」更新以反映 - 我猜答案是「是」。 – spieden 2011-05-20 20:46:48

1

如果您在MyISAM表上創建視圖,則SELECT和UPDATE是互斥的,因此表上的SELECT/UPDATE將阻止視圖上的任何UPDATE/SELECT。所以你想保持鎖緊。

在InnoDB上,這不是問題。

+0

當然,但這更多的是表鎖定如何工作的功能,而不是視圖引入的東西,對嗎? 「使用視圖」的「其他客戶端」的語言沒有被阻止,這使得我認爲視圖本身以某種方式被鎖定,超出了底層表(?) – spieden 2011-05-20 20:55:19