トモロログ

仕事や趣味でのメモや記録など

insert ignore 〜の問題

insert ignore 〜 の構文でインサートしたときには重複行がある場合にはインサートを実行しないのだがちょっと問題点が。。

 

プライマリキー(たとえば id) をauto_increment で設定していて かつ それ以外のカラムにUNIQUE KEYを設定している場合に問題があるよう。 insert ignore 〜でインサートが実行されないときにもauto_incrementが実行されるのでプライマリキーにギャップ(空番)が出てしまい、現状存在するプライマリキーの番号とシーケンスの番号の差異が一定以上(たしか10000)になるとエラーになってしまう。

 

これはmysql5.1.22 のinnoDBの仕様らしく設定を変えるしかないので断念。。

バルクインサートで便利かと思ったのだが、1データずつ存在チェック+インサートしかなさそう。パフォーマンスはわるそうだが仕方ないかな。。