テーブルを適切に切り捨てるにはどうしたらよいですか?
私はrubyでdatamapperを使用して、あるテーブルにデータを格納しています。
いくつかのテーブルは非常に大量の情報を持っており、ユーザーが 'ribilds database' (基本的にすべてを削除し、データを再計算します)したときにそれらを消去したいのです。
私はもともとForum.all.destroyを試して、すべての異なるテーブルに対してそれをやりましたが、それらのいくつかはphpmyadminの中から削除されないことに気づきました。しかし、私は本当に知らないので、私の他のテーブルの外部キーは正常に削除されました。もちろん、私はむしろ 'zero' キーが非常に大きな数字(キー#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
40
2
プランA
プランB
まず子テーブルを切り捨て、次に親テーブルを切り捨てます。
外部キーチェックを無効にすると、制約に従わない行がテーブルに入力され、未定義の動作を引き起こす可能性があります。
代わりに、外部キーチェックを無効にする.を使用します。
以下のコードを使用することができます。
それはちょうどすべての行を削除し、idが1以降に増加するようにします。