unique制約があるときのinsert
unique制約がついているテーブルに重複するデータをinsertしようとするとDuplicateエラーが発生します。
そこで以下の3通りのsqlが使える。
- replaceを使う
replace into ~
これはinsertをreplaceに置き換えるだけ。
重複するデータが無ければinsertを実行してくれ、重複するなら更新してくれる。
注意点として、updateではなく、deleteしてからinsertするので、
auto_incrementなcolumn等があればそれも変更されてしまうということ。
- insert ignoreを使う
insert ignore into ~
重複するデータが無ければinsertで、重複するなら何もしない。
- on duplicate key updateを使う
insert into ~ on duplicate key update foo = bar
重複するデータ無ければinsertで、重複するなら"foo"columnの値を"bar"にupdateする