【MySQL】 データあればUPDATE、なければINSERT ~ DUPLICATE KEY ~

データあればUPDATE、なければINSERT

 * MySQLでは、「INSERT INTO ~ ON DUPLICATE KEY UPDATE ~」で行う

使用上の注意

 * AUTO_INCREMENT を使用しているテーブルで、「INSERT INTO ~ ON DUPLICATE KEY UPDATE ~」を使用した場合
   UPDATE処理が走った場合でも、インクリメントされてしまう
詳細は以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/37138142.html

サンプル

CREATE TABLE文

CREATE TABLE `item` (
	`id` CHAR(8) NOT NULL,
	`name` VARCHAR(100) NULL DEFAULT NULL,
	`price` INT(11) NULL DEFAULT NULL,
	`releasedate` DATETIME NULL DEFAULT NULL,
	`createdate` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
	`updatedate` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

SQL

* ここからが本番
INSERT INTO item
(
  id,
  name,
  price,
  releasedate
) VALUES (
  'X0000',
  'Orange',
  120,
  '2016-07-14'
) ON DUPLICATE KEY UPDATE
  id = 'X0000',
  name = 'Orange',
  price = 121,
  releasedate = '2016-07-14'
;

実行結果

* 1回目
id	name	price	releasedate	createdate	updatedate
X0000	Orange	120	2016/7/14 0:00	2016/7/14 22:06	2016/7/14 22:06
* 2回目(price:121に変わってる)
id	name	price	releasedate	createdate	updatedate
X0000	Orange	121	2016/7/14 0:00	2016/7/14 22:06	2016/7/14 22:08


関連記事

MySQL】 INSERT INTO ~ ON DUPLICATE KEY UPDATE ~の使用上の注意

https://blogs.yahoo.co.jp/dk521123/37138142.html

データあればUPDATE、なければINSERT ~ @@ROWCOUNT ~

http://blogs.yahoo.co.jp/dk521123/30656970.html

データあればUPDATE、なければINSERT ~ MERGE文 (マージ文) ~

http://blogs.yahoo.co.jp/dk521123/30657481.html

MySQL】 データあればUPDATE、なければINSERT ~ DUPLICATE KEY / 条件付編 ~

http://blogs.yahoo.co.jp/dk521123/36495846.html