データあれば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
参考文献
http://www.united-bears.co.jp/blog/archives/2792http://qiita.com/yadok/items/fa72e8ae1d97033be218
http://mask.hatenadiary.com/entry/2013/11/22/163748
http://qiita.com/yuzroz/items/f0eccf847b2ea42f885f