Question

J'ai du mal à créer une table et je ne comprends pas ce qui ne va pas. phpMyAdmin définit l'indicateur d'erreur à côté de la déclaration PRIMARY KEY ... Je ne comprends pas pourquoi c'est faux ...

Cette table est une table enfant qui possède une relation d'identification un à plusieurs avec une autre table.

CREATE TABLE IF NOT EXISTS `ruilen`.`Voorwerpen` (
`voorwerpen_id` INT NOT NULL AUTO_INCREMENT ,
`naam` VARCHAR( 45 ) NOT NULL ,
`beschrijving` VARCHAR( 45 ) NULL ,
`Gebruikers_gebruiker_id` INT NOT NULL ,
PRIMARY KEY ( `voorwerpen_id` , `Gebruikers_gebruiker_id` ) ,
CONSTRAINT `fk_Voorwerpen_Gebruikers1` FOREIGN KEY ( `Gebruikers_gebruiker_id` ) REFERENCES `ruilen`.`Gebruikers` (
`gebruiker_id`
) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB;

MySQL said: Documentation
#1005 - Can't create table 'ruilen.voorwerpen' (errno: 150) 

EDIT: c’est toute la documentation sur le code d’erreur que je peux trouver: Lien

EDIT2: image supprimée

EDIT3:

CREATE TABLE `gebruikers` (
 `gebruiker_id` int(11) NOT NULL,
 `naam` varchar(45) NOT NULL,
 `straat` varchar(45) NOT NULL,
 `gemeente` varchar(45) NOT NULL,
 `mail` varchar(45) NOT NULL,
 `beschrijving` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Était-ce utile?

La solution

Vérifiez que Gebruikers_gebruiker_id et Gebruikers . gebruiker_id ont le même type de données.

Vérifiez également que Gebruikers . gebruiker_id est un PRIMARY KEY dans Gebruikers

Mise à jour:

Vous avez défini ON DELETE SET NULL , tandis que votre Gebruikers_gebruiker_id est défini comme NOT NULL .

Corrigez-le (passez à ON DELETE CASCADE ou supprimez simplement la clause) et vous pourrez créer la référence.

Autres conseils

Mon cas est généralement dû à une incompatibilité de types de données. N'oubliez pas s'il s'agit d'une vérification int que les deux sont unsigned ou non

Ce n’est pas vraiment une caractéristique buggy de mysql. Il peut y avoir deux raisons possibles pour cela! 1) Les types de données de la PK et du FK ne correspondent pas. 2) Cette erreur peut survenir dans les versions antérieures à 4.1 où vous devez définir explicitement les index.

Une autre raison d'ajouter:

  

Un jeu de caractères ou moteur différent posera également ce problème

À mon avis, cela est une caractéristique très buggée de MySQL - et le moindre souci est de simplement vider la structure de la table et les données, puis de déposer la table et de réexécuter le code SQL à partir du dump, puis de recréer manuellement les index et les fichiers. contraintes de clé étrangère si nécessaire.

J'avais une contrainte du même nom dans une table différente. Essayez de changer le nom de votre contrainte.

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