小编典典

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

all

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

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

mysql_query( $sql, $conn );

问题是当我执行这个查询时,我想检查是否应该检查一个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

这里是陷阱。我对如何进行感到困惑和困惑。我一次要插入/更新多行。请给我一个方向。谢谢。


阅读 63

收藏
2022-06-02

共1个答案

小编典典

从 MySQL 8.0.19
开始,您可以为该行使用别名(请参阅参考资料)。

INSERT INTO beautiful (name, age)
    VALUES
    ('Helen', 24),
    ('Katrina', 21),
    ('Samia', 22),
    ('Hui Ling', 25),
    ('Yumie', 29)
    **AS new**
ON DUPLICATE KEY UPDATE
    age = **new.** age
    ...

对于早期版本,请使用关键字VALUES(请参阅参考资料,在 MySQL 8.0.20 中已弃用)。

INSERT INTO beautiful (name, age)
    VALUES
    ('Helen', 24),
    ('Katrina', 21),
    ('Samia', 22),
    ('Hui Ling', 25),
    ('Yumie', 29)
ON DUPLICATE KEY UPDATE
    age = **VALUES** (age),
     ...
2022-06-02