Lors du chargement de données dans des tables avec des contraintes de clé étrangère, garantir l'intégrité référentielle est crucial. Cependant, définir FOREIGN_KEY_CHECKS sur 0 pendant le chargement peut entraîner des incohérences de données après leur réactivation.
Pour résoudre ce problème, pensez à utiliser la procédure stockée fournie : 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 ;
Cette procédure analyse tous clés étrangères et identifie toutes les lignes qui les violent. Les résultats sont stockés dans la table INVALID_FOREIGN_KEYS.
Pour utiliser cette procédure :
Notez que cette procédure nécessite des index sur les colonnes référencées et référencées pour des performances optimales.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!