MySQL ON DUPLICATE KEY UPDATE用于在单个查询中插入多行

Pra*_*ant 192 mysql sql duplicates

我有一个SQL查询,我想在单个查询中插入多行.所以我使用了类似的东西:

$sql = "INSERT INTO beautiful (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22),
  ('Hui Ling', 25),
  ('Yumie', 29)";

mysql_query( $sql, $conn );
Run Code Online (Sandbox Code Playgroud)

问题是当我执行这个查询时,我想检查是否应该检查一个UNIQUE密钥(不是PRIMARY KEY),例如'name'上面的密钥,如果'name'已经存在,则应该更新相应的整行,否则插入.

例如,在下面的示例中,如果'Katrina'数据库中已存在,则应更新整个行,而不管字段的数量.如果'Samia'不存在,则应插入该行.

我想过使用:

INSERT INTO beautiful (name, age)
      VALUES
      ('Helen', 24),
      ('Katrina', 21),
      ('Samia', 22),
      ('Hui Ling', 25),
      ('Yumie', 29) ON DUPLICATE KEY UPDATE
Run Code Online (Sandbox Code Playgroud)

这是陷阱.我陷入困境,对如何继续感到困惑.我有多行要一次插入/更新.请给我一个指示.谢谢.

Pet*_*ang 448

使用关键字VALUES来引用新值(请参阅文档).

INSERT INTO beautiful (name, age)
    VALUES
    ('Helen', 24),
    ('Katrina', 21),
    ('Samia', 22),
    ('Hui Ling', 25),
    ('Yumie', 29)
ON DUPLICATE KEY UPDATE
    age = VALUES(age),
     ...
Run Code Online (Sandbox Code Playgroud)

  • 很好的建议。如果您想在重复时增加一个值,请在“ON DUPLICATE KEY UPDATE”部分后添加以下内容:total =total + VALUES(total) (3认同)