MySQLでbulk insert + on duplicate key updateしたい

·1 分で読めます

MySQLでINSERT INTO hoge VALUES (...), (...), (...)のbulk insertでon duplicate key update(すでにレコードがあったらUPDATEで上書きする)って併用できるのかな?っていうのが気になったので調べてみたらできるみたい。VALUES関数というその目的のためだけに存在するような関数を使う。

こんな感じでテーブル作って

CREATE TABLE users (
    name VARCHAR(255) NOT NULL,
    age TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY (name)
) ENGINE=InnoDB;

データをINSERTして

INSERT INTO users VALUES
  ('akuwano', 25), ('oinume', 24), ('oranie', 23);

SELECT * FROM users;
+---------+-----+
| name    | age |
+---------+-----+
| akuwano |  25 |
| oinume  |  24 |
| oranie  |  23 |
+---------+-----+

INSERT ... ON DUPLICATE KEY UPDATEで重複したレコードがあった場合に全てアップデートされるかな?

INSERT INTO users VALUES
  ('akuwano', 15), ('oinume', 14), ('oranie', 13)
  ON DUPLICATE KEY UPDATE age = VALUES(age);

mysql> SELECT * FROM users;
+---------+-----+
| name    | age |
+---------+-----+
| akuwano |  15 |
| oinume  |  14 |
| oranie  |  13 |
+---------+-----+

された!!

実践ハイパフォーマンスMySQL 第3版

実践ハイパフォーマンスMySQL 第3版

  • 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,菊池研自,株式会社クイープ
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2013/11/25
  • メディア: 大型本
  • この商品を含むブログ (7件) を見る