ON DUPLICATE KEY更新(带有多个where子句)

时间:2013-07-20 17:38:32

标签: mysql sql

此查询存在问题。 (MySQL的)

我有一个主键(id),如果条件不存在,我想插入一个新值或更新现有值:

INSERT into records (name, value, p_id, c_id) 
VALUES ('Store', 'TX', 1188913, 1133) 
ON DUPLICATE KEY UPDATE name = 'TX' WHERE p_id = 6188002 and c_id = 77102

所以在这种情况下,我会有一个已经存在的记录:

id = 10235192
name = 'Store'
value = 'AL'
p_id = 6188002
c_id = 77102

我希望该记录从value ='AL'更新为'TX'

但我所看到的只是插入了一条新记录。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您应该在UNIQUE的复合列上指定INSERT...ON DUPLICATE KEY UPDATE约束。

ALTER TABLE records ADD CONSTRAINT tb_uq UNIQUE (p_id, c_id)

并且不需要WHERE子句。

INSERT into records (name, value, p_id, c_id) 
VALUES ('Store', 'TX', 1188913, 1133) 
ON DUPLICATE KEY UPDATE value = 'TX'

答案 1 :(得分:0)

我遇到了同样的问题,答案可以在这里找到。

Conditional duplicate key updates with MySQL

实际答案是WHERE子句在MySQL中不支持,您需要使用IF条件。

这样的事情:

INSERT INTO daily_events
(created_on, last_event_id, last_event_created_at)
VALUES
('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
last_event_id = IF(last_event_created_at < VALUES(last_event_created_at),     VALUES(last_event_id), last_event_id),
last_event_created_at = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_created_at),   last_event_created_at);