ある時点で新しいデータをロードしたい開発データベース (MYSQL) があります。すべてのテーブルの内容を削除したいと思います。すべてのテーブル (外部キー制約を持つテーブルを含む) のコンテンツを削除するための、可能な限り自動化された最善の方法は何ですか? すべてを切り捨て/すべてを削除する同等の制約はありますか?
ありがとう
ある時点で新しいデータをロードしたい開発データベース (MYSQL) があります。すべてのテーブルの内容を削除したいと思います。すべてのテーブル (外部キー制約を持つテーブルを含む) のコンテンツを削除するための、可能な限り自動化された最善の方法は何ですか? すべてを切り捨て/すべてを削除する同等の制約はありますか?
ありがとう
次のことができると思います。
外部キー制約チェックを無効にする
mysql> SET FOREIGN_KEY_CHECKS = 0;
テーブルを切り捨てる
mysql> TRUNCATE MY_TABLE;
外部キー制約チェックを有効にする
mysql> SET FOREIGN_KEY_CHECKS = 1;
外部キー制約を削除/再作成するよりも、一時的に無効にすることを好みます。
本当にすべてのテーブルをより良い方法で切り捨てたい場合は、以前に抽出したデータベーススキーマを使用してデータベースを削除して作成すると思います。または、同じデータベースの 2 つのコピー (テストと空) を実行できます。テーブルを埋めたら、test db を削除し、空のものを test にコピーします。
TRUNCATE (TABLE) tbl_name は、単一のテーブルを切り捨てます。それをスクリプトに貼り付けて、すべてのテーブル名でループすることができます。
http://dev.mysql.com/doc/refman/5.0/en/truncate.html
移行についても調べたいと思うかもしれませんが、Alexey は適切なアプローチを取っていると思います。これは、実行のたびに RoR がテスト データベースを再構築する方法と非常によく似ています。