LoginSignup
2
1

More than 5 years have passed since last update.

Re: MySQLで複数行を一括でUPDATEする

Posted at

元ネタは半年前に書かれたやつだけど、最近はてなブックマークでみかけて気になったので。

CREATE TABLE と JOIN を使わなくても、 INSERT ... ON DUPLICATE KEY UPDATE でいけるんじゃないかなと思った。

> CREATE TABLE data(id INTEGER PRIMARY KEY, name VARCHAR(255), body VARCHAR(255));

> INSERT INTO data (id, name, body) VALUES
  (1, 'a', '001'),
  (2, 'b', '002'),
  (3, 'c', '003'),
  (4, 'd', '004'),
  (5, 'e', '005'),
  (6, 'f', '006')
;

> SELECT * FROM data;
+----+------+------+
| id | name | body |
+----+------+------+
|  1 | a    | 001  |
|  2 | b    | 002  |
|  3 | c    | 003  |
|  4 | d    | 004  |
|  5 | e    | 005  |
|  6 | f    | 006  |
+----+------+------+
6 rows in set (0.00 sec)

> INSERT INTO data (id, body) VALUES (1, 'aaa'), (4, 'ddd')
  ON DUPLICATE KEY UPDATE body=VALUES(body);

> SELECT * FROM data;
+----+------+------+
| id | name | body |
+----+------+------+
|  1 | a    | aaa  |
|  2 | b    | 002  |
|  3 | c    | 003  |
|  4 | d    | ddd  |
|  5 | e    | 005  |
|  6 | f    | 006  |
+----+------+------+
6 rows in set (0.00 sec)

Bulk insert 時の重複対策ぐらいにしか使った事がないので、実は INSERT ... ON DUPLICATE KEY UPDATE には落とし穴があるのかもしれないけど。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1