別の環境のデータをローカルに持ってくるという場合に、テーブルの構造はそのままでデータそのものをごっそり差し替えたい時があります。頑張って差分をとっても良いんですけど、漏れがあると面倒くさいし。
テーブルのデータ削除については、AUTO_INCREMENT を考えて TRUNCATE を使うと便利です。
TRUNCATE TABLE sample_table;
ただ、このテーブルに外部キー制約が設定されている場合、次の様なエラーが出ます。
Cannot truncate a table referenced in a foreign key constraint ... (以下外部キー制約の設定)
対策としては、
- 設定されている外部キー制約をひとつずつ外して、TRUNCATE 後に再設定
- 外部キー制約をひとつずつオフにして、TRUNCATE 後に再度オンに
が考えられますが、それ以外に、
- 外部キー制約機能をオフにして、TRUNCATE 後に再度オンに
という方法があります。
実際のクエリはこんな感じ。
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE csample_table;
SET FOREIGN_KEY_CHECKS = 1;
これで無事 TRUNCATE 出来るので、新しいデータを INSERT して完了です。