2015-02-24 57 views
0

我正在開發一個PHP和MySQL的Web應用程序,我有一種情況,我必須限制要插入表中的記錄數。併發PHP和MySQL請求

... 
const MAX= 10 
if(/*record count query*/ < $this::MAX) { 
/*insert query*/ 
} 
... 

爲了測試目的,我只是通過使用來自瀏覽器的GET請求來觸發此代碼。

當我連續點擊F5鍵(刷新)約5秒時,計數超過最大值。

但是,當我一個一個地去計數是在極限。

這表明當我單擊F5連續執行count queryinsert query正在同時執行。我不知道如何解決這個問題,一些指導會對我有幫助。

回答

1

您必須LOCK該表,所以當您嘗試獲取當前計數時,沒有其他進程寫入數據庫。否則,你總是處於另一個進程當前插入數據的風險之下。

出於性能方面的原因,您可以將另一個表用作計數器,在這些操作過程中您將鎖定該計數器。

+0

我收到錯誤號碼:1100表'示例'未鎖定爲鎖定表 – bkmagnetron 2015-02-24 09:18:32

+0

注意:查詢將從一個表讀取並插入到其他表中。所以,我使用了很多嵌套查詢。 – bkmagnetron 2015-02-24 09:22:44

+0

好吧,它使用子查詢表的別名後工作。 – bkmagnetron 2015-02-24 12:28:56