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)

Foi útil?

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_

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