外部キーが原因で、新しい要件を満たすためにデータベース構造を変更する際に非常に多くの問題が発生しています - 主キーを変更したいのですが、外部キーが問題のテーブルを参照しているとできないようです (MySQL がテーブルを削除して再作成するためだと思います)。 )。
そのため、DB で作業している間は、すべての外部キーを単純に削除して、後で再作成したいと考えています。そうするためのきちんとした方法はありますか?
外部キーが原因で、新しい要件を満たすためにデータベース構造を変更する際に非常に多くの問題が発生しています - 主キーを変更したいのですが、外部キーが問題のテーブルを参照しているとできないようです (MySQL がテーブルを削除して再作成するためだと思います)。 )。
そのため、DB で作業している間は、すべての外部キーを単純に削除して、後で再作成したいと考えています。そうするためのきちんとした方法はありますか?
作成する Alter Table ステートメントの前に、次のコマンドを発行するだけです。
SET foreign_key_checks = 0;
これにより、データベース接続の外部キー制約チェックがオフになります。その後、制約を気にせずに変更を加えることができます。
完了したら、次を発行することを忘れないでください。
SET foreign_key_checks = 1;
それらをオンに戻すには。
これにより、列のデータ型が一致しないために失敗する新しい外部キー制約を作成することはまだできないことに注意してください。
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;