SQL - code d'erreur 1005 avec numéro d'erreur 121
Je suis en cours d'exécution suivants MySQL script (abaissé), généré automatiquement par MySQL Workbench et j'obtiens l'erreur suivante:
Code D'Erreur: 1005
Ne peut pas créer la table " regula.réservation' (errno: 121)
Je ne suis pas très compétent avec des bases de données et cette erreur n'est pas très informatif.
Quel est le problème ici?
-- -----------------------------------------------------
-- Table `regula`.`Users`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `regula`.`Users` ;
CREATE TABLE IF NOT EXISTS `regula`.`Users` (
`idUsers` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` TEXT NOT NULL ,
`type` TEXT NOT NULL ,
`pwd` TEXT NOT NULL ,
PRIMARY KEY (`idUsers`) ,
UNIQUE INDEX `idUsers_UNIQUE` (`idUsers` ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `regula`.`Projects`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `regula`.`Projects` ;
CREATE TABLE IF NOT EXISTS `regula`.`Projects` (
`idProjects` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`ownerId` INT UNSIGNED NOT NULL ,
`name` TEXT NOT NULL ,
`date` DATE NOT NULL ,
`time` TIME NOT NULL ,
`place` TEXT NOT NULL ,
`itemType` INT NOT NULL ,
PRIMARY KEY (`idProjects`) ,
UNIQUE INDEX `idProjects_UNIQUE` (`idProjects` ASC) ,
INDEX `ownerId` (`ownerId` ASC) ,
CONSTRAINT `ownerId`
FOREIGN KEY (`ownerId` )
REFERENCES `regula`.`Users` (`idUsers` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `regula`.`ItemTypes`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `regula`.`ItemTypes` ;
CREATE TABLE IF NOT EXISTS `regula`.`ItemTypes` (
`idItemTypes` INT UNSIGNED NOT NULL ,
`prjId` INT UNSIGNED NOT NULL ,
`parentId` INT UNSIGNED NULL DEFAULT NULL ,
`name` TEXT NOT NULL ,
PRIMARY KEY (`idItemTypes`) ,
INDEX `prjId` (`prjId` ASC) ,
INDEX `parentId` (`parentId` ASC) ,
CONSTRAINT `prjId`
FOREIGN KEY (`prjId` )
REFERENCES `regula`.`Projects` (`idProjects` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `parentId`
FOREIGN KEY (`parentId` )
REFERENCES `regula`.`ItemTypes` (`idItemTypes` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `regula`.`Reservation`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `regula`.`Reservation` ;
CREATE TABLE IF NOT EXISTS `regula`.`Reservation` (
`idReservation` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`prjId` INT UNSIGNED NOT NULL ,
`itemTypeId` INT UNSIGNED NOT NULL ,
`userId` INT UNSIGNED NOT NULL ,
PRIMARY KEY (`idReservation`) ,
INDEX `prjId` (`prjId` ASC) ,
INDEX `itemTypeId` (`itemTypeId` ASC) ,
INDEX `userId` (`userId` ASC) ,
CONSTRAINT `prjId`
FOREIGN KEY (`prjId` )
REFERENCES `regula`.`Projects` (`idProjects` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `itemTypeId`
FOREIGN KEY (`itemTypeId` )
REFERENCES `regula`.`ItemTypes` (`idItemTypes` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `userId`
FOREIGN KEY (`userId` )
REFERENCES `regula`.`Users` (`idUsers` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
OriginalL'auteur Amir Rachum | 2010-12-10
Vous devez vous connecter pour publier un commentaire.
Erreur 121 signifie qu'il y a une contrainte de clé étrangère d'erreur. Depuis que vous utilisez InnoDB, vous pouvez utiliser
SHOW ENGINE INNODB STATUS
après l'exécution de l'échec de la requête pour obtenir une explication dans leLATEST FOREIGN KEY ERROR
section. Après avoir exécuté votre SQL moi-même, j'obtiens ceci:Fondamentalement, vous avez besoin pour donner à votre prjId nom de la contrainte d'un nom unique dans le dernier tableau. La contrainte/noms des clés étrangères sont globaux à une base de données, de sorte qu'ils ne peuvent pas être réutilisés dans différents tableaux. Il suffit de changer la dernière
à
Vous pouvez avoir besoin d'AFFICHER du MOTEUR INNODB STATUS; Sans le 'MOTEUR' mysql jetait des erreurs de syntaxe pour moi.
Vous avez raison, je l'ai mis à jour. MySQL supprimé l'ancienne syntaxe à partir de la version 5.5.
OriginalL'auteur Jonathan Amend
Le code d'erreur 121 arrive quand vous essayez de mapper la clé étrangère.
fondamentalement, il s'agit lors de votre nom de clé étrangère existent déjà dans la base de données.
par exemple:-
Si la clé étrangère avec le nom event_booking_id est déjà mappé avec l'autre table.
Pour obtenir tour de cette question s'il vous plaît changer la clé étrangère n'est pas le nom le nom de la colonne.
OriginalL'auteur Pankaj Singh
Vous obtiendrez ce message d'erreur si vous essayez d'utiliser le nom de la contrainte qui est déjà sur la table. Ici, 'prjId" est déjà sur la table
regula
.ItemTypes
. Donc, vous ne pouvez pas utiliser le même nom de contrainte sur la table " regula.réservation de nouveau.OriginalL'auteur Dhaval