MySQL Errno 150
Je suis la création de quelques tables simples, et je ne peux pas me passé de cette erreur de clé étrangère et je ne suis pas sûr pourquoi. Voici le script ci-dessous.
create TABLE Instructors (
ID varchar(10),
First_Name varchar(50) NOT NULL,
Last_Name varchar(50) NOT NULL,
PRIMARY KEY (ID)
);
create table Courses (
Course_Code varchar(10),
Title varchar(50) NOT NULL,
PRIMARY KEY (Course_Code)
);
create table Sections (
Index_No int,
Course_Code varchar(10),
Instructor_ID varchar(10),
PRIMARY KEY (Index_No),
FOREIGN KEY (Course_Code) REFERENCES Courses(Course_Code)
ON DELETE cascade
ON UPDATE cascade,
FOREIGN KEY (Instructor_ID) REFERENCES Instructors(ID)
ON DELETE set default
);
Code D'Erreur: 1005. Ne peut pas créer la table '336_project.les sections' (errno: 150)
Mon des types de données semblent identiques et que la syntaxe est correcte. Quelqu'un peut-il point de ce que je ne vois pas ici?
Je suis de l'utilisation de MySQL Workbench 5.2
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en utilisant le moteur InnoDB, le
ON DELETE SET DEFAULT
est votre problème. Voici un extrait du manuel:Vous pouvez utiliser
ON DELETE CASCADE
ouON DELETE SET NULL
, mais pasON DELETE SET DEFAULT
. Il n'y a plus d'informations ici.CREATE TABLE
déclarations ici, la seule chose que j'avais à faire pour les faire fonctionner est le changement deON DELETE SET NULL
. Je n'ai pas à ajouter des index. Cela dit, c'est une bonne idée d'avoir des index le long de votre FKs de toute façon si tout est bien 🙂NOT NULL
soit. Découverte de la migration d'uneON DELETE RESTRICT
colonne à uneON DELETE SET NULL
colonne.Cette erreur se produit également si vous êtes en relation des colonnes de types différents, par exemple. int dans la table source et BigInt dans la table de destination.
Vous pouvez exécuter
de lire la raison de l'échec dans un format lisible par l'homme
par exemple
Il peut également être le cas si vous ne spécifiez pas le
ON DELETE
à tous, mais essayez de faire référence à une table MYISAM de table InnoDB:Permettra de jeter errno 150. Un besoin de changer la première table InnoDB trop pour que cela fonctionne.
Afin de créer un
FOREIGN KEY
avec référence à une autre table, les clefs des deux tables doivent êtrePRIMARY KEY
et avec le même type de données.Dans votre table des sections,
PRIMARY KEY
est de type de données différent je.eINT
mais dans une autre table, il est de type je.eVARCHAR
.Est un échec sur le
Je n'ai pas rencontré qu'avant et je ne suis pas le voir dans les manuels, soit ( mais il est tard )
Mise à jour
juste vu dans le manuel
Je suppose que vous pouvez utiliser les tables InnoDB ?
Ici Problème est dans le moteur de base de données ( table1
MYISAM
et table2ENGINE
).Pour définir les Clés ÉTRANGÈRES,
Espère que vous avez eu une idée.
Assurez-vous que la table est de type InnoDB, MyISAM ne supporte pas de clé étrangère, autant que je sache.
Par souci d'exhaustivité - vous sera également obtenir cette erreur si vous faites une référence étranger à une table qui n'est pas défini à l'époque;