2014-02-13 73 views
1

對於iPad應用程序,我創建了一個Web服務,它在用戶啓動應用程序時在我的團隊表中創建一個新的表格行。 PHP生成一個唯一的ID並填充其他一些字段。mySQL INSERT with TRIGGER的計時問題

此外,我已經在mySQL的團隊表上創建了一個觸發器,根據已插入的特定日期,項目和組的行數,自動生成團隊編號。

不幸的是,我有時會在向表中插入新行時出現計時問題。如果兩個應用程序在同一秒內創建一個團隊(毫秒?),則mySQL觸發器的結果將與這兩個應用程序的團隊編號相同。因此,而不是有teamnumber 1和2都應用有teamnumber 1.

我teamtable看起來是這樣的:

TeamID | pProject | group | teamnumber | languagecode | created_at 

和觸發對MySQL:

CREATE TRIGGER after_team_insert BEFORE INSERT ON teams 

FOR EACH ROW 
BEGIN 

SELECT COUNT(*) INTO @counter 
FROM teams 
WHERE DATE(created_at) = DATE(NOW()) 
AND teams.group = NEW.group 
AND teams.pProject = NEW.pProject; 

SET NEW.teamnumber = CAST(@counter AS UNSIGNED) + 1; 

END; 

我想我的問題有與將行插入到數據庫中的並行線程有關,因此在觸發器工作時得到錯誤的計數。

有沒有人有這個問題的解決方案,或者我必須在PHP中使用某種隊列來防止這種團隊編號倍增?

在此先感謝, Carsten。

回答

0

如果因任何原因,你不能鎖定你的表,你可以嘗試以不同的方式處理這個問題:

  • 添加唯一約束的列組/ pProject/teamnumber。
  • 在您的代碼中處理任何約束錯誤,檢查團隊編號是否是問題,然後嘗試重新評估它。
  • 確保您的團隊編號已設置。如果不是,請再試一次。

不就是乾淨,有點棘手,但它應該做的工作,如果你不介意的團隊數3後球隊4號。

+0

謝謝,鎖定工作現在很好,但你的方法也很有趣! – carsten