Ошибка MySQL 121
-
19-09-2019 - |
Вопрос
Я получаю эту ошибку в 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_