Quantcast
Channel: プログラム の個人的なメモ
Viewing all articles
Browse latest Browse all 860

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

$
0
0

■ はじめに

https://blogs.yahoo.co.jp/dk521123/36225584.html
で扱ったInsert or Update「INSERT INTO ~ ON DUPLICATE KEY UPDATE ~」で
盲点だったことをまとめる。

■ 使用上の注意

 * 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回目
`name`created_at
`id
`price
updated_at 1 Orange 120 2017-09-27 23:15:20 2017-09-27 23:15:20
""
2回目
`name`created_at
`id
`price
updated_at 1 Orange 121 2017-09-27 23:15:20 2017-09-27 23:16:13
3回目 ★id=3になっている★
`name`created_at
`id
`price
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

関連記事

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

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

Viewing all articles
Browse latest Browse all 860

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>