將資料載入到具有外鍵約束的表中時,確保引用完整性至關重要。但是,在載入期間將 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中文網其他相關文章!