什么会导致upsert失败(不插入任何行)?

时间:2012-10-16 18:54:44

标签: php mysql mysqli upsert

我有一个INSERT INTO ... ON DUPLICATE KEY UPDATE查询由于某种原因被mysql服务器忽略,至少据我所知。

它正在抓住现有行的更新。

我的主键为“id”,part_no列为“唯一”。

以下是查询:

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)

第一列是小数,然后是一堆整数,最后两列是varchars。这是零件清单数据库中的一个条目(我们碰巧列出了零件编号,但实际上还没有它)。我正在遍历所有部件号的列表(通过使用last_modified列),并且此特定查询不会更新时间戳。

这可能是因为行中的信息实际上没有变化(所有指定的值都与初始值相同)?

该查询适用于(很多)以前的数据库条目。

[edit]我已经从PHP脚本检查了查询中的响应错误并直接(使用phpmyadmin),它们不会返回任何错误字符串。 [/编辑]

1 个答案:

答案 0 :(得分:2)

on update current_timestamp仅在至少有一个列实际更新时生效。如果您尝试使用已有的值更新行,则不会将其视为更新(受影响的行数不变),on update不会生效。

手动将last_modified=now()添加到您的更新中会更可靠。