19

数百のテーブルを持つデータベースがあります。foreign_keys を使用するテーブルは INNODB を使用します。

mysqldump開発、ステージ、および本番データベース間でデータ (を使用して個々のテーブル) を転送することがあります。mysqldumpデータのインポートを容易にするために、すべての外部キー チェックを無効にします。

そのため、時間が経つにつれて、非実動データベースのいくつかは、いくつかの孤立したレコードになってしまいます。

私は、MySQL データベース全体の無効な (欠落しているレコードを指しているキー) 外部キーを見つけて検出するスクリプトを作成しようとしていました。

各テーブルと fkey を 1 つずつチェックするクエリを作成できることはわかっていますが、これを行うためのツールが既にあるのではないかと考えていました。

そのようなスクリプトを作成する前に、既に存在するかどうかを確認します。

グーグルで少し検索しました...驚くべきことに、何も見つかりませんでした。

4

2 に答える 2

22

データが既に存在し、親を削除するための fk 制約またはカスケードを設定していない場合は、次のことが必要です。

SELECT * FROM children WHERE my_fk_id NOT IN (select id from parents);
于 2012-08-10T18:19:19.337 に答える