1. ホーム
  2. sql

[解決済み】MySQL ON DUPLICATE KEY UPDATEで1クエリで複数行挿入する場合

2022-04-06 02:18:47

質問

1つのクエリで複数行を挿入したいので、次のような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

ここで罠が。どうすればいいのか、行き詰って混乱してしまいました。一度に挿入/更新する行が複数あるのですが。方向性を教えてください。ありがとうございます。

解決方法は?

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),
     ...