2011-06-23 21 views
1

讓我們創建page.php文件如果我可以鎖幾張桌子,那會不好?

query1 
query2 
query3 

有沒有什麼辦法來鎖定幾桌,所以,如果一個用戶訪問page.php文件和第二用戶在稍後打開該網頁,第二個用戶將需要等到第一個用戶的所有查詢都會執行。

更重要的是,如果同一頁面上有幾百個用戶在同一時間,它會非常慢嗎?

謝謝。

+0

爲什麼要鎖定表以進行簡單查詢? – wallyk

+0

@wallyk:它不可能在同一時間發生。 –

+2

不要鎖定。使用交易。 –

回答

2

您可以使用行級別鎖定導致連接阻塞其他用戶。

BEGIN TRAN 

UPDATE table1 set locked = 1; //table locks are only taken out when data is written, you could possibly also use lock hints. 
UPDATE table2 set locked = 1; 
UPDATE table3 set locked = 1; 

//Tables are locked, do whatever you need here, other users hitting the page will block at the first update statement until this connection hits the commit or rollback 

update table1 set locked = 0; 
update table2 set locked = 0; 
update table3 set locked = 0; 

COMMIT 

請注意,儘管您可以使用鎖定提示使其鎖定行,但select行不會導致行或表的鎖定。你最好的辦法就是通過在行中設置一個值到自己或添加另一列來觸摸行。

數據庫性能良好,因爲它們適應併發性。任何時候,如果你導致連續表現的行爲,你會遭受性能損失。在某些情況下,這可能沒問題,這取決於你實際上在做什麼。

我更多的是SQL Server的傢伙,但它是非常通用的數據庫管理系統的概念,爲進一步的信息我會去了解一下:

事務隔離級別 http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

鎖定提示 http://www.xaprb.com/blog/2006/08/05/how-to-give-locking-hints-in-mysql/

行/表鎖定機制 http://dev.mysql.com/doc/refman/5.5/en/internal-locking.html

1

有什麼辦法來鎖定幾桌

你可能用lock tables,但它更重要的是減慢你的頁面向下

而且,它會減緩 網站非常多,如果有幾個 幾百個用戶同時在 的同一頁上?

如果你這樣做,它會減慢你的頁面。

http://dev.mysql.com/doc/refman/5.0/en/lock-tables-restrictions.html

您還可以避免使用用戶級 諮詢鎖功能GET_LOCK()和 RELEASE_LOCK()在 某些情況下,鎖定表。這些鎖被保存在服務器中的散列表中的 以及用pthread_mutex_lock() 和pthread_mutex_unlock()實現的高 速度的 。請參見第11.14節, 「其他功能」。

我仍然認爲像其他人告訴你應該只使用transactions來代替。


P.S:你想達到什麼我打賭有一個更好的方法來實現這一點。可能即使沒有鎖/交易。

相關問題