Domanda

Ok, quindi sto creando le tabelle in MySQL con indici e chiavi esterne. Io uso MySQL Workbench per creare le tabelle e poi in avanti engineer una SQL creare uno script (che faccio meglio in un ambiente visivo DB che solo scrivendo il codice SQL a mano subito).

Il problema è molte volte quando ho importare lo script SQL in MySQL, ho l'eror classica:

#1005 - Can't create table 'db.tablename' (errno: 121) 

Sono riuscito a capire il problema ogni volta, di solito indice / chiave esterna legati, ma ora sto iniziando a irritarsi di dover risolvere il problema ogni volta. Io non capisco quale sia il problema (soprattutto quando un prodotto di MySQL è la creazione di codice SQL per il proprio database). Di seguito è riportato un codice che in genere causa il problema.

CREATE  TABLE IF NOT EXISTS `db`.`groupMembers` (
  `groupMembersID` INT NOT NULL AUTO_INCREMENT ,
  `groupID` INT NOT NULL ,
  `userID` INT NULL ,
  PRIMARY KEY (`groupMembersID`) ,
  INDEX `group` (`groupID` ASC) ,
  INDEX `user` (`userID` ASC) ,
  CONSTRAINT `group`
    FOREIGN KEY (`groupID` )
    REFERENCES `db`.`groups` (`groupsID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `user`
    FOREIGN KEY (`userID` )
    REFERENCES `db`.`users` (`usersID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

L'errore di solito viene dalla prima definizione INDEX - anche quando prendo la definizione dell'indice, ottengo solo l'errore alla prima definizione del vincolo di chiave esterna. Ho controllato, e la chiave della colonna a distanza estera e la colonna locali sono gli stessi dati-tipo e dimensione.

È stato utile?

Soluzione

"errno 121 significa un errore di chiave duplicata"

I vincoli devono avere un nome univoco nel database, si potrebbe desiderare di cambiare i vostri nomi FK. Come così, FK_groupMembers_group e FK_groupMembers_user.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top