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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top