


Comment forcer les vérifications de clés étrangères dans les tables InnoDB lorsque `SET FOREIGN_KEY_CHECKS=1` ne parvient pas à déclencher des avertissements ou des erreurs ?
Nov 13, 2024 am 03:16 AMComment appliquer les vérifications de clés étrangères dans les tables InnoDB
Problème
Vous gérez un ensemble de tables InnoDB qui subissent des mises à jour périodiques impliquant la suppression de lignes et l'insertion. Ces tables ont des contraintes de clé étrangère, ce qui rend l'ordre de chargement des tables crucial. Pour éviter les problèmes de contrainte de clé étrangère, vous comptez sur la désactivation et la réactivation des vérifications de clé étrangère (SET FOREIGN_KEY_CHECKS=0 et SET FOREIGN_KEY_CHECKS=1). Cependant, vous constatez que le chargement des données avec les vérifications désactivées ne déclenche aucun avertissement ou erreur lorsque vous les réactivez, malgré la violation intentionnelle des règles de clé étrangère.
Solution
InnoDB ne fournit pas un moyen direct de forcer une vérification de clé étrangère, mais il existe des solutions de contournement.
Utilisation d'une procédure stockée
Une approche consiste pour créer une procédure stockée (ANALYZE_INVALID_FOREIGN_KEYS) qui examine toutes les clés étrangères d'une base de données et identifie celles qui sont violées. La procédure parcourt les clés étrangères, génère des requêtes pour vérifier les références non valides et stocke les résultats dans une table temporaire.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Pour utiliser la procédure, fournissez trois paramètres :
- Le modèle de nom de base de données (checked_database_name) à vérifier (par exemple, % pour toutes les bases de données)
- Le modèle de nom de table (checked_table_name) pour vérifier (par exemple, % pour toutes les tables)
- Si la table de résultats doit être temporaire (temporary_result_table) (Y pour temporaire, N pour permanent)
La procédure se charge les résultats dans une table temporaire ou permanente nommée INVALID_FOREIGN_KEYS. Cette table contient des informations sur les clés étrangères non valides, notamment le schéma de la table, le nom de la table, le nom de la colonne, le nom de la contrainte, le schéma de la table référencée, le nom de la table référencée, le nom de la colonne référencée, le nombre de clés non valides et une requête SQL pour récupérer les lignes non valides.
Exemple d'utilisation
Pour vérifier les clés étrangères invalides dans toutes les bases de données :
1 |
|
Pour afficher le résultats :
1 |
|
Pour récupérer les lignes invalides pour une clé étrangère spécifique, exécutez la requête INVALID_KEY_SQL correspondante à partir de la table INVALID_FOREIGN_KEYS.
Remarque
Cette approche nécessite des index sur les colonnes référentes 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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Quels sont les outils de GUI MySQL populaires (par exemple, MySQL Workbench, PhpMyAdmin)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
