2010-03-23 86 views

回答

9

你不能對非指定的鎖!

更多信息: http://forums.mysql.com/read.php?21,222363,223774#msg-223774

除非你先用一個諮詢鎖。您可能還想考慮使用INSERT DELAYED。

但是,您可以使用SHOW OPEN TABLES來顯示每個表的狀態。

還有像「MetaLock」這樣的可怕的事情,我很高興你沒有遇到這種情況。

2

article介紹如何獲取有關鎖定MySQL的資源信息。 mysqladmin debug也可能有一定用處。

+1

很好,但是MyISAM被鎖定了嗎?歡呼聲 – Marcin 2010-03-23 13:56:48

+0

對不起,幫不了你。 – 2010-03-23 15:02:12

4

如果你做一個GET_LOCK(lockName, 0)以0超時你鎖定表,然後按照之前,您可以創建自己的鎖用GET_LOCK(鎖名稱,超時)

與一個RELEASE_LOCK(lockName)那麼所有其他線程執行GET_LOCK()將得到一個值0,這將告訴他們該鎖被另一個線程持有。

但是,如果在鎖定表之前沒有所有調用GET_LOCK()的線程,這都不起作用。鎖定表的文檔是here

希望有幫助!

+1

這隻適用於命名鎖什麼是非命名鎖? – Marcin 2010-04-05 12:32:55

+0

你不能用於非命名鎖 – 2010-04-06 16:31:27

42

您可以使用SHOW OPEN TABLES來顯示每個表的鎖定狀態。有關該命令的文檔頁面的更多詳細信息是here

0

最簡單的方法是:

SHOW OPEN TABLES WHERE In_use > 0 

你只能得到當前數據庫的鎖定表。