39

外部キーが原因で、新しい要件を満たすためにデータベース構造を変更する際に非常に多くの問題が発生しています - 主キーを変更したいのですが、外部キーが問題のテーブルを参照しているとできないようです (MySQL がテーブルを削除して再作成するためだと思います)。 )。

そのため、DB で作業している間は、すべての外部キーを単純に削除して、後で再作成したいと考えています。そうするためのきちんとした方法はありますか?

4

4 に答える 4

50

作成する Alter Table ステートメントの前に、次のコマンドを発行するだけです。

SET foreign_key_checks = 0;

これにより、データベース接続の外部キー制約チェックがオフになります。その後、制約を気にせずに変更を加えることができます。

完了したら、次を発行することを忘れないでください。

SET foreign_key_checks = 1;

それらをオンに戻すには。

これにより、列のデータ型が一致しないために失敗する新しい外部キー制約を作成することはまだできないことに注意してください。

于 2012-12-05T22:08:32.797 に答える
2

CONSTRAINT_SCHEMA複数のデータベースで同じテーブルを作成する場合は、出力を忘れずに入力してください。

SELECT concat('ALTER TABLE ', CONSTRAINT_SCHEMA,'.',TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';')
FROM information_schema.key_column_usage
WHERE CONSTRAINT_SCHEMA like 'your_db_prefix_%'
    AND TABLE_NAME='your_table'
    AND REFERENCED_TABLE_NAME IS NOT NULL;
于 2018-04-03T19:44:29.107 に答える