Question

J'ai deux tableaux:

Tableau Auteur: ID (entier), author_name (VARCHAR), first_name (VARCHAR), nom_famille (VARCHAR), preferred_name (VARCHAR).

Tableau coauthored: ID (INTEGER) author1ID (INTEGER), author2ID (INTEGER), paper_ID (ENTIER) (ID du document co-auteur référencé par ce lien)

Je veux ajouter des contraintes clés étrangères telles que author1ID et author2ID en co-auteur de référence à ID Auteur. Je définissais les tableaux en tant que tel:

CREATE TABLE Author(ID INT, author_name VARCHAR(100), preferred_name VARCHAR(100), first_name VARCHAR(100), last_name VARCHAR(100), PRIMARY KEY(ID)) ENGINE=INNODB;

CREATE TABLE CoAuthored(ID INT, author1ID INT, author2ID INT, paper_ID INT);

Ceci est ma tentative de création de la clé étrangère:

ALTER TABLE CoAuthored ADD foreign key (author1ID) references Author(ID) on delete cascade on update cascade;

Ce qu'exécuter bien, mais lorsque je tente d'ajouter un tuple qui contient un author1ID qui n'existe pas dans ID, cela me permet de le faire, ce qui signifie la contrainte de clé étrangère ne fonctionne pas.

Que dois-je faire différemment? J'ai essayé de faire les deux tables MOTEUR = InnoDB dans la créer des déclarations, mais je me faisais une erreur 1005 ne peut pas créer la table.

Était-ce utile?

La solution

à partir de: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6035435.html

Afin de mettre en place une relation de clé étrangère entre deux tables de MySQL, trois conditions doivent être remplies:

  1. Les deux tables doivent être du type de table InnoDB.

  2. Les champs utilisés dans la relation clé étrangère doit être indexée.

  3. Les champs utilisés dans la relation de clé étrangère doivent être du même type de données.

Important:. Pour les tables non-InnoDB, la clause FOREIGN KEY est ignoré

Autres conseils

Pouvez-vous essayer 'MOTEUR = InnoDB'

Les contraintes clés étrangères / contraintes clés fonctionnent avec les tables InnoDB seulement:)

- Vive

Tout d'abord: Vous devez définir toutes les tables impliquées avec les clés étrangères pour être InnoDB. MyISAM ne supporte pas simplement les clés étrangères.

Votre problème ici (erreur 1005) est un peu déroutant. Si vous faites un ALTER TABLE, cela signifie qu'il ya une valeur dans l'un des domaines clés étrangères qui n'a pas de référence dans une autre table.

Lors de la création des tables, assurez-vous que vous créez la table « mère » d'abord, puis la deuxième et la troisième table.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top