Вопрос

Я получаю эту ошибку в 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)

Это было полезно?

Решение

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

Другие советы

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

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

SET FOREIGN_KEY_CHECKS = 0;

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top