外部キー制約のあるテーブルにデータをロードする場合、参照整合性を確保することが重要です。ただし、ロード中に FOREIGN_KEY_CHECKS を 0 に設定すると、再度有効にした後にデータの不整合が発生する可能性があります。
これに対処するには、提供されているストアド プロシージャ ANALYZE_INVALID_FOREIGN_KEYS の使用を検討してください。
DELIMITER $$ CREATE PROCEDURE `ANALYZE_INVALID_FOREIGN_KEYS`( checked_database_name VARCHAR(64), checked_table_name VARCHAR(64), temporary_result_table ENUM('Y', 'N')) LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA BEGIN DECLARE VARIABLES... OPEN foreign_key_cursor; foreign_key_cursor_loop: LOOP FETCH foreign_key_cursor INTO TABLE_SCHEMA_VAR, ... SET @from_part = CONCAT(...); SET @full_query = CONCAT(...); PREPARE stmt FROM @full_query; EXECUTE stmt; IF @invalid_key_count > 0 THEN INSERT INTO INVALID_FOREIGN_KEYS SET `TABLE_SCHEMA` = TABLE_SCHEMA_VAR, ... END IF; DEALLOCATE PREPARE stmt; END LOOP foreign_key_cursor_loop; END$$ DELIMITER ;
このプロシージャはすべてを分析します。外部キーを検出し、それらに違反する行を特定します。結果は INVALID_FOREIGN_KEYS テーブルに保存されます。
このプロシージャを使用するには:
最適なパフォーマンスを得るには、この手順では参照列と参照列の両方にインデックスが必要であることに注意してください。
以上がデータのロード後に InnoDB に外部キーの再チェックを強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。