unique制約があるときのinsert

unique制約がついているテーブルに重複するデータをinsertしようとするとDuplicateエラーが発生します。
そこで以下の3通りのsqlが使える。

  1. replaceを使う
replace into ~

これはinsertをreplaceに置き換えるだけ。
重複するデータが無ければinsertを実行してくれ、重複するなら更新してくれる。
注意点として、updateではなく、deleteしてからinsertするので、
auto_incrementなcolumn等があればそれも変更されてしまうということ。

  1. insert ignoreを使う
insert ignore into ~

重複するデータが無ければinsertで、重複するなら何もしない。

  1. on duplicate key updateを使う
insert into ~ on duplicate key update foo = bar

重複するデータ無ければinsertで、重複するなら"foo"columnの値を"bar"にupdateする