将数据加载到具有外键约束的表中时,确保引用完整性至关重要。但是,在加载期间将 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中文网其他相关文章!