2013-10-10 20 views
0

我有兩個字段的表 - 帳戶及東西如果我有'WHERE'字段的副本,我如何更新MySQL條目?

我有這個疑問:

INSERT INTO users VALUES ('$userId', '$something') 
ON DUPLICATE KEY UPDATE something='$something' 
WHERE userId='$userId' 

這是爲什麼不工作?如果我刪除

WHERE userId='$userId' 

然後它工作,但它更新所有行,我顯然不想更新每個userId相同的信息。

userId字段在數據庫中設置爲UNIQUE。

+1

'INSERT ... VALUES ... WHERE ...對重複密鑰更新...',順序很重要(所以不是'INSERT ... VALUES ...對重複密鑰更新...在哪裏......) – Wrikken

+1

請解釋你的意思*不工作*。 – Oswald

+0

讓我猜測:你得到的消息是這樣的:*你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在[something]附近使用正確的語法* – Barranka

回答

2

它不起作用,因爲你的語法錯了。

正確的語法如下:

INSERT INTO yourTable (col1, col2, ...) 
VALUES (value1, value2, ...) 
ON DUPLICATE KEY UPDATE non_key_col1 = newValue1; 

有沒有WHERE參與。

請閱讀MySQL reference for insert... on duplicate key update


從我上面提供的鏈接引用:

如果指定ON DUPLICATE KEY UPDATE,行插入,將在UNIQUE指數導致重複的值或者PRIMARY KEY,MySQL的執行老行的UPDATE

+0

是否有任何解決方法?我需要它,我不想更新所有的行,只是與相應的userId。 –

+1

@ToniPerić你看了我提供的鏈接嗎?這完美地滿足您的需求! – Barranka

+0

這真是太棒了,基本上我只需要**從我一直在執行的sql查詢中刪除「WHERE ...」。 非常感謝,巴蘭卡! –

0
INSERT INTO users1 VALUES ('$userId', '$something') 
ON DUPLICATE KEY UPDATE something= 
IF(userId='$userId','$something',something) 
相關問題