Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment maintenir la contrainte de clé étrangère sur différentes bases de données ?

Je ne vois aucun moyen de faire cela avec MySQL standard.

Vous pouvez écrire un plugin pour MySQL Proxy , qui gère l'intégrité référentielle entre les tables parent et enfant sur différents serveurs :

  • Intercepter INSERT et UPDATE contre table enfant. Requête pour la ligne correspondante dans la table parent. Échec INSERT /UPDATE si aucune correspondance n'est trouvée dans la table parent.

  • Intercepter DELETE contre la table parent. Requête pour les lignes dépendantes dans la table enfant. Échec DELETE si des lignes dépendantes ont été trouvées dans la table enfant. Si la contrainte est destinée à prendre en charge le comportement en cascade, faites-le au lieu d'échouer.

  • Intercepter UPDATE contre la table parent. Si la valeur de la clé primaire change dans le cadre de la mise à jour, recherchez les lignes dépendantes trouvées dans la table enfant. Échec UPDATE si des lignes dépendantes ont été trouvées dans la table enfant. Si la contrainte est destinée à prendre en charge le comportement en cascade, faites-le au lieu d'échouer.

Notez que vous devrez conserver des informations sur les contraintes d'intégrité référentielle dans votre plugin MySQL Proxy (ou écrire un fichier de configuration personnalisé pour votre plugin qui enregistre les relations). Vous ne pouvez pas utiliser la FOREIGN KEY conventionnelle syntaxe pour déclarer de telles contraintes sur les instances MySQL.