とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


サイドバー

言語

サーバ関連

ツール

API

読み物

その他

sql:insert_on_duplicate_key_update

[SQL] レコードがなければINSERT、あればUPDATEする

ここではMySQLでの実行方法を取り上げます。

構文

INSERT句で、ON duplicate key updateを利用することで実現できます。

INSERT INTO `テーブル名` (id, name) 
  VALUES (1, 'りんご')
ON duplicate KEY UPDATE
    id   = 1
  , name = 'ぱんだ';

ここでは次のようなテーブルを想定しています。 id列がプライマリとなりますので、idが重複するINSERT文の場合はUPDATEが実行されます。

mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(64) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

実行例

mysql> select * from test;
+----+---------+
| id | name    |
+----+---------+
|  1 | foobar  |
|  2 | katsube |
+----+---------+

mysql> INSERT INTO test (id, name) VALUES ( 1, "りんご") ON duplicate key update id=1, name="ぱんだ";                                                

mysql> select * from test;
+----+---------+
| id | name    |
+----+---------+
|  1 | ぱんだ   |
|  2 | katsube |
+----+---------+

参考

関連書籍

関連ページ

sql/insert_on_duplicate_key_update.txt · 最終更新: 2020/06/23 14:10 (外部編集)