2011-03-13 2 views
2

Je crée une table avec le nom "temp1" - Il a une clé primaire avec le nom aa et quelques autres champs. Et j'ai une autre table avec le nom temp2. Je veux ajouter foreign key avec le nom cc.comment ajouter une clé étrangère?

J'ai écrit ci-dessous le code, mais il a quelques erreurs:

create table temp1 ( 
    aa int,  
    primary key(aa)  
); 

create table temp2 (
    bb int, 
    cc int, 
    primary key(bb), 
    foreign key(cc) references temp1 
); 

..Mais-il cette erreur:

can't create table 'temp.temp2'

temp est mon nom de base de données.

Edit: 

I insérer des données dans aa (clé primaire dans temp1), mais il n'importe pas dans

cc (clé étrangère dans temp2).

pourquoi?

Je pensais que si les données d'insertion dans la clé primaire INSERER automatique dans

clé étrangère !! si ce vrai?

Répondre

5

Vous devez spécifier le champ étranger que vous liez ainsi:

foreign key (cc) references temp1 (aa) 

dans l'instruction create table ou

alter table temp2 add foreign key (cc) references temp1 (aa) 

après. De même, votre SQL pour la table temp1 est défectueux - il n'y a pas de champ a pour créer une clé primaire - Je suppose que c'est juste une faute de frappe dans votre question.

1

De l'MySQL foreign key documentation:

If MySQL reports an error number 1005 from a CREATE TABLE statement, and the error message refers to error 150, table creation failed because a foreign key constraint was not correctly formed.

L'examen de votre requête, qui est correcte - vous devez utiliser:

CREATE TABLE temp2 (
    bb int, 
    cc int, 
    PRIMARY KEY (bb), 
    FOREIGN KEY (cc) REFERENCES temp1(aa) 
); 

Lorsque vous faites une contrainte de clé étrangère, vous devez spécifier la colonne l'étranger La clé se rapporte à dans la table parente. SQL ne suppose pas que vous voulez la colonne de la clé primaire, car il pourrait y en avoir d'autres.

0

Votre code est valide Syntaxe SQL-92 standard.

Vous pouvez tester cela en utilisant le Mimer SQL-92 Validator en ligne.

Vous pouvez le vérifier en lisant les spécifications SQL-92, 11.8 "définition de la contrainte de référence", 2b):

If the referenced table and columns does not specify a reference column list, then the table descriptor of the referenced table shall include a unique constraint that specifies PRIMARY KEY .

Malheureusement, mySQL n'est pas conforme-92 SQL et il semble que la liste des colonnes de référence est Champs obligatoires.

Questions connexes