2012-10-16 61 views
1

我有一個INSERT INTO ... ON DUPLICATE KEY UPDATE查詢,由於某種原因被mysql服務器忽略,至少據我所知。什麼會導致upsert失敗(不插入任何行)?

它捕捉到現有行的更新。

我有一個「id」的主鍵,part_no被列爲Unique。

下面是該查詢:

INSERT INTO parts_prices (cost, 
chatsworth, 
atlanta, 
north_carolina, 
new_jersey, 
arizona, 
colorado, 
miami, 
indianapolis, 
ohio, 
oregon, 
dallas, 
san_antonio, 
washington, 
memphis, 
alt_sup, 
part_no) 
VALUES (0.00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 'HS3163') 
ON DUPLICATE KEY UPDATE 
cost=VALUES(cost), chatsworth=VALUES(chatsworth), atlanta=VALUES(atlanta), north_carolina=VALUES(north_carolina), new_jersey=VALUES(new_jersey), arizona=VALUES(arizona), colorado=VALUES(colorado), miami=VALUES(miami), 
indianapolis=VALUES(indianapolis), ohio=VALUES(ohio), oregon=VALUES(oregon), dallas=VALUES(dallas), san_antonio=VALUES(san_antonio), washington=VALUES(washington), memphis=VALUES(memphis), alt_sup=VALUES(alt_sup) 

第一列是一個小數,然後一堆整數的,最後兩個是VARCHAR處理。這是零件清單數據庫中的條目(我們碰巧列出了零件號碼,但實際上並沒有它)。我遍歷所有零件編號的列表(通過使用last_modified列),並且此特定查詢不更新時間戳。

難道這是因爲該行中的信息實際上並未發生變化(所有指定的值都與初始值相同)?

該查詢適用於(相當多)數據庫中以前的條目。

我在PHP腳本的查詢中檢查了響應錯誤並直接(使用phpmyadmin),它們不返回任何錯誤字符串。 [/編輯]

回答

2

on update current_timestamp只有在至少有一列實際更新時才生效。如果嘗試使用已有值更新一行,則不會將其視爲更新(受影響的行數不變),並且on update不會生效。

last_modified=now()手動添加到更新中會更可靠。

+0

謝謝!像魅力一樣工作!我會盡快接受你的回答。 – Riet

相關問題