【MySQL】外部キー制約のあるテーブルのデータを差し替える

mysql_logo.png


別の環境のデータをローカルに持ってくるという場合に、テーブルの構造はそのままでデータそのものをごっそり差し替えたい時があります。頑張って差分をとっても良いんですけど、漏れがあると面倒くさいし。

テーブルのデータ削除については、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 して完了です。


参考

MySQLで外部キーの制約があるテーブルをtruncateする方法 | ハックノート