2025-12-21 mysql外部キー追加のDDLアルゴリズム
外部キー操作のオンライン DDL サポートは公式ドキュメントによると下記の通り。
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ |
|---|---|---|---|---|---|
| 外部キー制約の追加 | いいえ | はい* | いいえ | はい | はい |
| 外部キー制約の削除 | いいえ | はい | いいえ | はい | はい |
see. MySQL :: MySQL 8.0 リファレンスマニュアル :: 15.12.1 オンライン DDL 操作
「インプレース:はい」となっているが、条件付きの「はい」であることに注意が必要。
INPLACEアルゴリズムは、foreign_key_checksが無効な場合にサポートされます。それ以外の場合は、COPYアルゴリズムのみがサポートされます。ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1) REFERENCES tbl2(col2) referential_actions;
INPLACE 実行のために foreign_key_checks=0 で実行する
INPLACE アルゴリズムはforeign_key_checks=0の時に有効になるので、COPYアルゴリズムを嫌う場合は、外部キー制約チェックを無効化してから外部キーを追加すると良い。
外部キーの追加と削除操作はforeign_key_checksが無効になっている場合に即時に実行できます。それ以外の場合は、テーブルリビルド(ALGORITHM=COPY)のみがサポートされます。
foreign_key_checksとは外部キー制約の検査を有効、または無効にするためのシステム変数です。この変数をOFFにすることで、外部キーの制約を一時的に無視することができます。ただし、データの整合性が保証されなくなる可能性があるため、慎重に使用する必要があります。