LoginSignup
14
15

More than 5 years have passed since last update.

複数件のINSERTでON DUPLICATE KEY UPDATE

Last updated at Posted at 2016-02-15

とりあえず答えだけ

IDをプライマリキーに設定

CREATE TABLE `my_table` (
  `pri_id` int(10) unsigned NOT NULL,
  `update_time` date NOT NULL,
  PRIMARY KEY (`pri_id`)
) ENGINE=InnoDB;

INSERTクエリ

INSERT INTO `my_table`
(pri_id, update_time) VALUES 
(1, '2016-02-13'),
(2, '2016-02-14')
ON DUPLICATE KEY UPDATE update_time = VALUES(`update_time`);

キーポイント

ON DUPLICATE KEY UPDATE update_time = VALUES(update_time);

公式リファレンスを読む方はこちら

UPDATE 句で VALUES(col_name) 関数を使用して、INSERT ... ON DUPLICATE KEY UPDATE ステートメントの INSERT 部分からカラム値を参照できます。つまり、ON DUPLICATE KEY UPDATE 句にある VALUES(col_name) は、重複キーの競合が発生していない場合に挿入される col_name の値を参照します。この関数は、複数の行を挿入する際に特に役立ちます。VALUES() 関数は、INSERT ... UPDATE ステートメントの中でだけ意味を持ち、そうでなければ NULL を返します。
例:
mysql
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

そのステートメントは、次の 2 つのステートメントと同一です。
mysql
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)
ON DUPLICATE KEY UPDATE c=9;

14
15
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
14
15