此查询存在问题。 (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'
但我所看到的只是插入了一条新记录。我做错了什么?
答案 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);