MySQL的错误号121
-
19-09-2019 - |
题
我得到这个错误在MySQL创建。我做的:
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是一个外键约束问题。要检查的第一件事是,你的外键定义都ok(所有的表和字段名称是正确的,等等)。
您可以尝试创建表,以及像在此之前禁用外键检查:
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_
不隶属于 StackOverflow