MySQL errno 121
-
19-09-2019 - |
Pergunta
Estou recebendo este erro no MySQL criar. Eu estou fazendo:
CREATE TABLE `blogReply` (
`Id` INT(24) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key of This Table',
`blogId` INT(24) NOT NULL COMMENT 'Blog where this reply was posted',
`userId` INT(24) NULL COMMENT 'User the blog was posted by',
`name` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Name of the user that the reply was posted by',
`email` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Email of the user that the reply was posted by',
`http` VARCHAR(300) NULL DEFAULT 'Unknown' COMMENT 'The Webaddress of the user that the reply was posted by',
`message` TEXT NOT NULL COMMENT 'text of the blog',
`votes` INT(10) DEFAULT 0 COMMENT 'Rating of the Blog',
`ratedBy` TEXT COMMENT 'People who have already Voted on this blog',
`dateReg` BIGINT NOT NULL COMMENT 'Date the User was Registered',
PRIMARY KEY (`Id`),
CONSTRAINT `FK_userId` FOREIGN KEY(`userId`)
REFERENCES `user` (`Id`)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT `FK_blogId` FOREIGN KEY(`blogId`)
REFERENCES `blog` (`Id`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE = InnoDB;
Todas as idéias? O erro Unidos: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)
Solução
Verifique se todas as suas limitações são realmente soletrada corretamente, também verificar que não há quaisquer outras tabelas que usa os nomes de restrição FK_userId ou FK_blogId
Outras dicas
Erro 121 é uma questão de restrição de chave estrangeira. A primeira coisa a verificar é que as definições de chave estrangeira são ok (todas as tabelas e campo nomes estão corretos, etc.).
Você pode tentar desativar verificação de chaves estrangeiras antes de criar a tabela como bem, como este:
SET FOREIGN_KEY_CHECKS = 0;
Isso tem a desvantagem de jogar erros mais tarde, quando você reativar seus cheques (SET-lo para 1), no entanto, se este for o caso, então isso significa que você tem alguns registros inválidos em algum lugar que estão interferindo com a criação de a chave estrangeira.
No entanto, este problema também pode ocorrer se você estiver movendo manualmente os arquivos de banco de dados ao redor, como renomear fisicamente o diretório data/your_database_name
. InnoDB pode mudanças físicas não correlatas assim para o espaço de tabela, por isso mucks com os internos.
Se é isso que você fez, a solução que funciona melhor é mover a sua volta banco de dados antigo para onde ele foi, tomar um despejo ou de exportação do mesmo, e fazer um DROP DATABASE
sobre ela antes de re-importação.
Por favor verifique se a sua chave estrangeira que você está criando é a mesma em todos os aspectos, tais como tipo de dados com a coluna da tabela a que se refere. Cada nome de chave estrangeira deve ser exclusivo para essas tabelas em que é criado, ele não deve ser usado em umas outras mesas. para o problema acima do nome da chave estrangeira "FK_userId" não deve ser utilizado em qualquer outra tabela.
Em Eu tenho este problema no MySQL 5.5 mas funciona bem no mysql 5.6. O problema foi porque o nome da restrição parece ser única, mas se este é um nome longo e é truncado a se tornar não exclusivo, por exemplo:
long_constraint_name_1
, long_constraint_name_2
pode tornar-se long_constraint_name_