MySQL Crea una tabella con l'errore indici
-
19-09-2019 - |
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.
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
.