75 votes

MySQL clé étrangère InnoDB entre différentes bases de données

Je voudrais savoir s'il est possible dans InnoDB en MySQL d'avoir une table avec une clé étrangère qui référence une autre table dans une base de données différente ?

Et si oui, comment cela peut-il être fait ?

74voto

BarsMonster Points 3484

Je ne vois aucune limitation sur https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html.

Alors utilisez simplement otherdb.othertable et vous serez bon.

1 votes

@Code4R7 Assurez-vous que les tables utilisent le même moteur, comme le dit la documentation: "La table parent et la table enfant doivent utiliser le même moteur de stockage[...]" Pour changer le moteur de la table, ALTER TABLE my_table ENGINE = InnoDB; A fonctionné pour MariaDB 10.1.16.

27voto

Spilarix Points 745

Il est possible : Lien pour le faire

Exemple (Table1 est dans database1 et HelloTable est dans database2) :

ALTER TABLE Table1 
ADD clé étrangère FK_table1(NomColonneDeTable1)
REFERENCES db2.HelloTable(NomColonneDeHelloTable)

13 votes

+1 Il faudrait ajouter que si, en plus du lien, vous aviez résumé le contenu du lien dans la réponse ici, ce serait un peu plus utile!

3 votes

-1 Un lien n'est pas suffisant, la réponse doit contenir plus d'informations (explication ou exemple).

7voto

Salim Points 56

Voici comment ajouter une clé étrangère sur la table t2, faisant référence à la table db1.historique(codh) :

alter table t2
add foreign key FK_t2(micod2)
    references db1.historial(codh)
    on delete cascade
    on update cascade;

0voto

Hosam Elzagh Points 707
ALTER TABLE `tablename1`
AJOUTER CONTRAINTE `tablename1_student_id_foreign` 
CLE ETRANGERE (`tablename1`.`id`) 
REFERENCE `db2`.`tablename2`(`id`)
SUR DELETE CASCADE SUR UPDATE CASCADE;

si nous avons une table appelée answers dans db1 et un étudiant dans db2 appelé ramiyusu_offline

nous devons taper comme ci-dessous

ALTER TABLE `answers`
AJOUTER CONTRAINTE `answers_student_id_foreign` 
CLE ETRANGERE (`id`)
REFERENCE `ramiyusu_offline`.`student`(`id`) 
SUR DELETE CASCADE SUR UPDATE CASCADE;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X