2010-09-16 7 views
3

J'essaye d'ajouter des clefs étrangères à ma table mais recevant cette erreur. Code d'erreur: 1005 Impossible de créer la table 'william. # Sql-88c_3' (erreur: 150) J'ai 3 tables. employé, client et contrat.MySQL Error Code: 1005

employé [employee_no PK], contrat client [customer_no PK] [contract_no PK] Je veux avoir les clés étrangères pour contrat contrat [contract_no PK, employee_no FK], customer_no FK]

J'ai essayé de le faire directement il a échoué, je suis en train d'essayer la déclaration alter.Is quelque chose de mal avec le script Alter?

ALTER TABLE contract 
    ADD CONSTRAINT `employee_no_fk2` FOREIGN KEY (`employee_no`) REFERENCES `employee` 
    (`employee_no`); 


    ALTER TABLE contract 
    ADD CONSTRAINT `Customer_no_fk2` FOREIGN KEY (`Customer_no`) REFERENCES `client` 
    (`Customer_no`); 

Répondre

10

La plupart de ces erreurs sera liée à match de miss type de données ou si .. Si vous pouviez passer par ces liens .. il pourrait vous aider, je suppose .. Check-this ... aussi Check-this

Comme on dit dans le second lien:

le premier endroit où vous devriez regarder est de savoir si les types de données sont d'accord entre la clé étrangère et les colonnes de clé primaire.

mysql> SHOW engine innodb STATUS; 

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
100130 17:16:57 Error IN FOREIGN KEY CONSTRAINT OF TABLE sampledb/#sql-4a0_2: 
FOREIGN KEY(member_type) 
REFERENCES common_lookup(common_lookup_id): 
Cannot find an INDEX IN the referenced TABLE WHERE the 
referenced COLUMNS appear AS the FIRST COLUMNS, OR COLUMN types 
IN the TABLE AND the referenced TABLE do NOT MATCH FOR CONSTRAINT. 
+1

Le deuxième lien a été très utile. J'essayais d'ajouter une clé étrangère avec delete set null, mais ma colonne cible n'avait pas de contrainte nulle, ce qui me donnait ce problème. Je pourrais résoudre le problème avec la commande 'SHOW engine innodb STATUS;' –

+1

Deuxième lien ftw! Je faisais comme il le décrit: "La variante la plus commune que j'ai rencontrée est où la colonne de clé primaire utilise un type de données int non signé et la colonne de clé étrangère utilise un type de données int.Il est assez agréable que le moteur InnoDB arrête Naturellement, vous le corrigez en changeant le type de données de clé étrangère pour qu'il corresponde au type de données int non signé. " –

2

faire en sorte que l'un des champs clés que vous essayez de référence ne dispose pas d'un index et/ou n'est pas une clé primaire. et les deux champs de type clé et/ou taille doivent correspondre exactement. Assurez-vous également que les deux tables sont des tables InnoDB.

0

dernière fois que je rencontrais cela, ce sont les contraintes: type de clé de table référencée était 'int' et une table de renvoi avait 'unsigned int', en référence champ par erreur, au lieu de int.