2012-10-16 113 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

相关问题