复制时多次插入

时间:2011-09-19 11:51:18

标签: php mysql

我正在尝试这样做:

INSERT INTO table (id, hits) VALUES ('abc', 1), ('cde', 1), ('fgh', 1)
ON DUPLICATE KEY UPDATE hits = VALUES (2), (6), (10)

代码错误(可能需要将id放入密钥更新中)但是无论如何都要这样做吗?

3 个答案:

答案 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