特定のテーブルにデータを保存するためにRubyでdatamapperを使用しています。
いくつかのテーブルには非常に大量の情報があり、ユーザーが「データベースを再構築する」ときに基本的に消去します(基本的にすべてを削除し、データを再計算します)。
私はもともとForum.all.destroyを試し、すべての異なるテーブルでそれを行いましたが、phpmyadmin内から削除されていないものがあることに気付きました。外部キーのためにしか想像できません。前もってキーを持っている他のテーブルが正常に削除されたので、私は本当に知りませんが。言うまでもありませんが、idは単に「ゼロ」にするだけなので、キーは非常に大きな数字(キー#500,000など)に到達しません。
次に、以下のコードで実行しようとしましたが、「外部キーの制約」のためにテーブルが消去されません。相互に依存するすべてのテーブルをクリアしていることを知っているので、強制的に動作させたいと思います(2つのテーブル、設定テーブル、ランダムストレージテーブルをクリアしないだけで、どちらも使用しません外部キー)。
これまでのところ...
adapter = DataMapper.repository(:default).adapter
adapter.execute('TRUNCATE TABLE `forums`, `dates`, `remarks`');
Mysql構文が明らかに間違っていることを除いて、それは問題ありません。それが最初のことです
私はphpmyadminで1つずつそれをやったし、そのようにしたときはそれが言う
Cannot truncate a table referenced in a foreign key constraint
プランA:
SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checking.
TRUNCATE TABLE forums;
TRUNCATE TABLE dates;
TRUNCATE TABLE remarks;
SET FOREIGN_KEY_CHECKS = 1; -- Enable foreign key checking.
次のプラン:
最初に子テーブルを切り捨ててから、親テーブルを切り捨てる必要があります。
外部キーチェックを無効にすると、未定義の動作を引き起こす可能性のある制約を順守しない行をテーブルに入力するリスクがあります。
を使用する代わりに、外部キーのチェックを無効にします。
以下のコードを使用できます。
DELETE FROM forums;
ALTER TABLE forums AUTO_INCREMENT = 1;
DELETE FROM dates;
ALTER TABLE dates AUTO_INCREMENT = 1;
DELETE FROM remarks;
ALTER TABLE remarks AUTO_INCREMENT = 1;
すべての行を削除し、idを1から増やします