2012-02-07 37 views
0

您好我有具有以下字段MySQL的同時插入限制

    A INT, B INT, C INT, D INT, Count INT 

我想插入成爲「A」,「B」,「C」 ANT「d」的值唯一一個MySQL表。即如果對於'A','B','C'和'D'的特定值存在'計數'條目,那麼對於相同的'A',' B','C'和'D'。問題是,超過1個用戶試圖同時插入相同的值到數據庫,所以有相同的值多次輸入數據庫的機會。我使用PHP來檢查是否存在一個條目是否存在特定值的'A ','B','C'和'D',如果是,我可以更新。但對於第一次沒有進入有一個機會,2個或更多用戶可以使一個相同的值」,‘B’,‘C’和‘d’在同一時間的插入,像

      A=10, B=8, C=4, D=5 AND Count=1 

          A=10, B=8, C=4, D=5 AND Count=2 

但我想爲第一(二)用戶插入「A = 10,B = 8,C = 4,D = 5 AND計數= 1」,並且該行被更新爲「A = 10,B = 8,第二個(第一個)用戶的C = 4,D = 5和計數= 3「,即使兩個用戶試圖同時插入值。我該如何解決這個問題?

+0

如果我理解正確,如果a,b,c或d的特定值已存在,您希望從插入移動到更新?你應該更清楚地解釋你的問題,我不確定你只使用MySQL。在MySQL中插入邏輯並不是處理這種情況的更好方法。 – 2012-02-07 11:57:14

回答

1

1)不要使用「計數」作爲列名 - 這是一個MySQL的關鍵字

2)你需要做的是要留意的副本,然後使用列的唯一關鍵在 '接通重複鍵更新' funcitonality:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO MYTABLE (A,b,C,d,entryCount) 值 上重複的密鑰更新 一個(,,,,0????) =?,b =?,c =?,d =?,entryCount = entryCount + 1;

該代碼在MySQL級別爲'線程安全',因此您無需在PHP中處理它。

+0

謝謝Danak57。 – 2012-02-07 17:47:29

+0

我知道這樣做可能不是最好的想法,但是如果將其用反引號(')括起來,你不能將任何東西用作列名稱嗎? – 2012-02-26 05:45:37

+0

是的,你可以,但這是一件非常愚蠢的事情。 – Danack 2012-02-26 08:29:29