MySQL Criar tabela com erro índices
-
19-09-2019 - |
Pergunta
Ok, então eu estou criando tabelas no MySQL com índices e chaves estrangeiras. Eu uso MySQL Workbench para criar as tabelas e, em seguida, tê-lo para a frente engendrar um SQL criar roteiro (I fazer melhor em um ambiente DB visual do que apenas escrever o código SQL à mão direita de distância).
O problema é muitas vezes quando eu importar o script sql para mysql, fico com a eror clássico:
#1005 - Can't create table 'db.tablename' (errno: 121)
Eu consegui descobrir o problema de cada vez, geralmente index / chave estrangeira relacionados, mas agora eu estou começando a ficar irritado por ter que corrigi-lo cada vez. Eu realmente não entendo qual é o problema (especialmente quando um produto MySQL é a criação de código SQL para seu próprio banco de dados). Abaixo está um código que normalmente faz com que o 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;
O erro geralmente vem da primeira definição INDEX - mesmo quando eu tirar a definição do índice, eu apenas obter o erro na primeira definição da restrição de chave estrangeira. Eu verifiquei, ea coluna remoto chave estrangeira e a coluna local são o mesmo tipo de dados e tamanho.
Solução
"errno 121 meios um erro de chave duplicada"
As restrições devem ter um nome exclusivo no banco de dados, você pode querer mudar seus nomes FK. Como assim, FK_groupMembers_group
e FK_groupMembers_user
.