Подтвердить что ты не робот

MySQL errory 121

Я получаю эту ошибку в MySQL create. Я делаю:

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;

Любые идеи? Состояние ошибки: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

4b9b3361

Ответ 1

Убедитесь, что все ваши ограничения действительно правильно написаны, также проверьте, нет ли других таблиц, которые используют имена ограничений FK_userId или FK_blogId

Ответ 2

Ошибка 121 - проблема ограничения внешнего ключа. Первое, что нужно проверить, это то, что ваши определения внешнего ключа в порядке (все таблицы и имена полей верны и т.д.).

Вы можете попробовать отключить проверку внешнего ключа перед созданием таблицы, например:

SET FOREIGN_KEY_CHECKS = 0;

Это имеет недостаток в том, что вы бросаете ошибки позже, когда вы повторно включаете проверки ключа (установите его в 1), однако, если это так, значит, у вас есть некорректные записи где-нибудь, которые мешают созданию внешний ключ.

Однако эта проблема также может возникнуть, если вы вручную перемещаете файлы базы данных, например, физически переименовываете каталог data/your_database_name. InnoDB не может сопоставлять физические изменения, подобные этому, с табличным пространством, поэтому он обманывает внутренности.

Если это то, что вы сделали, решение, которое лучше всего работает, - это переместить вашу прежнюю базу данных туда, где она есть, взять дамп или экспортировать ее и сделать DROP DATABASE на ней перед повторным импортом.

Ответ 3

убедитесь, что ваш внешний ключ, который вы создаете, одинаково во всех аспектах, таких как тип данных, с указанным столбцом таблицы. Каждое имя внешнего ключа должно быть уникальным для тех таблиц, в которых оно создано, оно не должно использоваться в других таблицах. для указанной проблемы имя внешнего ключа "FK_userId" не должно использоваться ни в одной другой таблице.

Ответ 4

У меня эта проблема в mysql 5.5, но отлично работает в mysql 5.6. Проблема заключалась в том, что имя ограничения выглядит уникальным, но если это длинное имя и усечено, станет не уникальным, например:

long_constraint_name_1, long_constraint_name_2 может стать long_constraint_name_