2010-01-03 90 views
0

我需要爲排隊系統使用一張表。該表將不斷更新。如何鎖定MySQL或phpmyadmin中的表?

例如,我的網站上的多個用戶將添加他們的文件進行處理,並且我聽說當多個用戶同時發生更新時,表格變得無法響應或類似情況。

所以我需要在這種情況下鎖定表?我如何將一個鎖應用到一個mysql表?

回答

0

當您一次執行多個更新時,可能會陷入死鎖狀態。像InnoDB這樣的引擎會檢測到這種情況,並且失敗其中一項交易(您可以重試,但僅限整個交易)。

您可以通過表鎖定來避免這種情況,但它會降低併發性。

引擎如MyISAM(它不支持MVCC或交易)無論如何都隱式地使用表鎖。這種表鎖只存在於查詢期間;他們會在表格不再需要時馬上自動發佈(不一定儘快,但很快)

我建議你不要使用LOCK TABLE,除非你覺得你真的需要;如果遇到死鎖,請重試交易。

1

那麼我在這種情況下需要鎖定表嗎?

所有表都可以鎖定,沒有特殊類型的表。也就是說,當你遇到死鎖時,處理這個問題。 Isolation levels也是一個密切相關的話題。

如何將鎖應用到mysql表?

還有的LOCK TABLES syntax - this article介紹如何&爲什麼你要鎖定表。

2

通過不斷更新你的意思是它會被追加到每秒10000次?即使對於中檔服務器,每秒仍然會呈現10,000次機會,以便其他用戶共享表。

當需要將多個依賴操作作爲一個單元出現時,只需要鎖定表。在大多數情況下,將一系列操作包括在數據庫交易中就足夠了。如果「不斷更新」只是insert sometable values (...),那麼很容易保證事務的一致性。