MysqlでON DUPLICATE KEY UPDATE姿勢を正しく使う

1408 ワード

ON DUPLICATE KEY UPDATE構文の目的は、データベースにレコードが存在する場合、この文を実行すると更新され、レコードが存在しない場合に挿入される重複性を解決することです.
 
注意点1:この文を使用するとき、この文がそのレコードに存在するかどうかを判断する基準は何ですか.同じ値は複数のレコードに同時に表示されるため、重複できないフィールドが必要です.
 
注意点2:ルールでは、挿入したレコードがUNIQUEインデックスまたはprimary key(プライマリ・キー)を繰り返すと、そのレコードが存在すると判断され、insert文ではなくupdate文が実行され、逆にinsert文が更新文ではなくinsert文が実行されます.だからON DUPLICATE KEY UPDATEはwhere条件を書くことができません.
 
実戦事例:

   INSERT INTO chip_montage_inprogress(activity_id, unique_code, chip_index_one, chip_index_two, chip_index_three, chip_index_four, chip_index_five, chip_index_six, chip_index_seven, chip_index_eight, chip_index_nine, chip_montage_finished)
   VALUES (#{activityId},#{uniqueCode},#{chipIndexOne},#{chipIndexTwo},#{chipIndexThree},#{chipIndexFour}, #{chipIndexFive}, #{chipIndexSix}, #{chipIndexSeven}, #{chipIndexEight}, #{chipIndexNine}, #{chipMontageFinished})
   ON DUPLICATE KEY UPDATE
   chip_index_one =#{chipIndexOne},
   chip_index_two=#{chipIndexTwo},
   chip_index_two=#{chipIndexTwo},
   chip_index_three=#{chipIndexThree},
   chip_index_four=#{chipIndexFour},
   chip_index_five=#{chipIndexFive},
   chip_index_six=#{chipIndexSix},
   chip_index_seven=#{chipIndexSeven},
   chip_index_eight=#{chipIndexEight},
   chip_index_nine=#{chipIndexNine}