0

データベースの 1 つを myisam から innodb に移行したいと考えています。主な理由は、私のアプリケーションが参照整合性を尊重できるようにすることです。

これは私がしたことです

  1. 現在の myisam データベースをエクスポートしました
  2. データベースを削除しました
  3. innodb データベースに切り替えましたhttp://parasjain.net/2010/06/08/how-to-switch-to-innodb-database-in-mysql/
  4. エンジン スイッチを確認し、新しいデータベースを作成しました

参照整合性が機能するようになりました。たとえば、Parent p1 と Child c1 を作成し、c1 で p1 を参照する場合、P1 に依存する子がある限り、P1 を削除できません。

ここまでは順調ですね

しかし、エクスポートされたダンプから古いデータをインポートすると問題が発生します

問題は、新しいデータに対して参照整合性が尊重されることです。しかし、私の既存のデータでは、c2 によって参照される p2 のような関係がある場合、p2 を削除して参照整合性を壊すことができます。c2 は現在孤立しています。

既存のデータにも参照整合性が適用されるように、テーブルを修復/再インデックス化する方法はありますか?

4

2 に答える 2

0

回答ありがとうございます。それは根本的な原因に私を導いたので、それは役に立ちました. 問題の根本的な原因は、mysqldump に drop および create ステートメントが含まれていたことです。create ステートメントには ENGINE=MYISAM が含まれていました。エクスポートの時点ではこれがエンジンだったからです。

--no-create-info オプションを使用して新しいダンプを作成したところ、すべて正常に機能しました。

于 2010-07-09T15:16:14.657 に答える
0

すべての外部キーと参照キーに新しいインデックスがあることを確認し (テーブル インデックスは挿入ごとに更新されます)、実行します。

ALTER TABLE you_table0 ADD FOREIGN KEY ...

各テーブルに対して、すべてのレガシー データが既に配置されています。

動作するはずです)

于 2010-07-08T22:28:11.503 に答える