我正在尝试这样做:
INSERT INTO table (id, hits) VALUES ('abc', 1), ('cde', 1), ('fgh', 1)
ON DUPLICATE KEY UPDATE hits = VALUES (2), (6), (10)
代码错误(可能需要将id放入密钥更新中)但是无论如何都要这样做吗?
答案 0 :(得分:1)
您需要正确使用VALUES
,这非常简单:
INSERT INTO table (id, hits) VALUES ('abc', 1), ('cde', 1), ('fgh', 1)
ON DUPLICATE KEY UPDATE hits = VALUES (hits)
编辑:如果您迫切需要在重复键上的单个查询中分配不同的值而不是在插入查询中,请尝试CASE operator。
INSERT INTO table (id, hits) VALUES ('abc', 1), ('cde', 1), ('fgh', 1)
ON DUPLICATE KEY UPDATE hits = CASE VALUES(id)
WHEN 'abc' THEN 3
WHEN 'cde' THEN 2
WHEN 'fgh' THEN 28
ELSE 11 -- this is a default value assuming you need one
END;
答案 1 :(得分:0)
如果你想将命中设置为2很容易,请执行:
INSERT INTO table (id, hits) VALUES ('abc', 1), ('cde', 1), ('fgh', 1)
ON DUPLICATE KEY UPDATE hits = 2;
如果要更新每个ID具有不同匹配的值,则需要使用不同的处理方式:
来自MySQL手册:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
您可以使用UPDATE子句中的VALUES(col_name)函数来引用INSERT ... UPDATE语句的INSERT部分中的列值。换句话说,UPDATE子句中的VALUES(col_name)引用了将插入的col_name的值,没有发生重复键冲突。此功能在多行插入中特别有用。 VALUES()函数仅在INSERT ... UPDATE语句中有意义,否则返回NULL。示例:
INSERT INTO table (id, hits) VALUES ('abc', 1), ('cde', 1), ('fgh', 1)
ON DUPLICATE KEY UPDATE hits = VALUES(hits)+1
答案 2 :(得分:0)
INSERT INTO table (id, hits)
VALUES ('abc', 1), ('cde', 2), ('fgh', 3)
ON DUPLICATE KEY
UPDATE hits = hits + VALUES (hits) ; --- increase by 1, 2, 3 accordingly
或
UPDATE hits = VALUES (hits) ; --- set to 1, 2, 3 accordingly