二次識別キーによるINSERT INTO ON DUPLICATE KEY

Image from Gyazo

mysqlで試したかったこと:

主キー+ユニークキー+その他属性 のテーブルについて、 INSERT INTO ON DUPLICATE KEY するとき 主キーを除いたユニークキー+その他属性でINSERTしたときでも、INSERTじゃなくてUPDATEしてくれるかどうか。

検証テーブル

  • id が 一次キー(主キー)
  • email は 二次キー(ユニークキー)

んで、 (email, name) に対して INSERT INTO ON DUPLICATE KEY したときに、 idが増えないことを確認したい。

最初の値を入れる

一次キーを除いて二次キーのみ指定するパターン (email)

二次キーは存在するレコード (‘a@example.com’)

実行前

Image from Gyazo

実行後

Image from Gyazo

結果 UPDATE

1行目の name が ‘hoge’ になる

二次キーは存在しないレコード (‘a@example.com’)

実行前

Image from Gyazo

実行後

Image from Gyazo

結果 INSERT

まぁ、これはレコードが増えるます

一次キーと二次キーを指定するパターン (id, email)

一次キーは未存在(4) 二次キーは存在する(‘a@example.com’)

実行前

Image from Gyazo

実行後

Image from Gyazo

結果 UPDATE 二次キー優先

二次キーが優先された。

一次キーは存在する(1) 二次キーは存在する別なレコードを指す(‘b@example.com’)

実行前

Image from Gyazo

実行後

Image from Gyazo

結果 UPDATE 一次キー優先

えーっと、一次キーにマッチしたレコードが優先して更新される!二次キーにマッチするはずのレコードは更新されない。
この挙動は注意してデータつくらんといかんね。

一次キーは存在する(1) 二次キーは未存在(’e@example.com’)

実行前

Image from Gyazo

実行後

Image from Gyazo

結果 UPDATE 一次キー優先

Filed under: テストTagged with:

よく読まれている投稿

No comment yet, add your voice below!


Add a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.