■ 使用上の注意
* AUTO_INCREMENT を使用しているテーブルで、「INSERT INTO ~ ON DUPLICATE KEY UPDATE ~」を使用した場合
UPDATE処理が走った場合でも、インクリメントされてしまう
■ 例
CREATE TABLE
CREATE TABLE `fruit` (
`id` INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` VARCHAR(100) NOT NULL UNIQUE,
`price` INT(11) NULL DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '作成日時',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時'
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
SQL
* ここからが本番 -- 二回実行する
INSERT INTO fruit
(
name,
price
) VALUES (
'Orange',
120
) ON DUPLICATE KEY UPDATE
name = 'Orange',
price = 121
;
-- 三回目で実行する
INSERT INTO fruit
(
name,
price
) VALUES (
'Apple',
99
) ON DUPLICATE KEY UPDATE
name = 'Apple',
price = 97
;
出力結果
1回目 `id | | `name
`price | | `created_at
updated_at
1 Orange 120 2017-09-27 23:15:20 2017-09-27 23:15:20
""
2回目 `id | | `name
`price | | `created_at
updated_at
1 Orange 121 2017-09-27 23:15:20 2017-09-27 23:16:13
3回目 ★id=3になっている★ `id | | `name
`price | | `created_at
updated_at
1 Orange 121 2017-09-27 23:15:20 2017-09-27 23:16:13
3 Apple 99 2017-09-27 23:17:32 2017-09-27 23:17:32
参考文献
https://qiita.com/yamikoo@github/items/b39f683626740be54c3a