我正在使用Mysql Workbench。我已经摆好桌子了。
现在我想在名为Personal_Details
的表中添加外键,该键是Login
表中的主键。
但是当我尝试这样做时,它会向我显示以下错误:
ERROR 1005: Can't create table 'shaadiDB.#sql-404_25' (errno: 121)
SQL语句:
ALTER TABLE `shaadiDB`.`Personal_Details`
ADD CONSTRAINT `Login_Id`
FOREIGN KEY (`Login_Id` )
REFERENCES `shaadiDB`.`Login` (`Login_Id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
, ADD INDEX `Login_Id` (`Login_Id` ASC)
答案 0 :(得分:1)
表Personal_Details
似乎有数据,其中可能存在一些带有Login_Id的行,表Login
中没有该条目。
如果是这种情况,那么解决方案是您需要将数据移动到另一个表,然后添加约束。添加约束后,您需要将所有行添加回表1中。
答案 1 :(得分:1)
错误121 :当密钥名称重复时,会显式抛出此错误。
运行Alter ...
语句后,立即执行以下操作并观察结果。
SHOW ENGINE InnoDB STATUS;
结果中的描述文本将告诉您找到重复的键名。
在此基础上修改ALTER ...
语句并执行。
或者,您也可以通过执行以下命令找到是否定义了任何此类重复键名称:
select constraint_name, constraint_type, table_name
from information_schema.table_constraints
where table_schema = DATABASE() -- and constraint_type = 'foreign key'
约束类型可以是PRIMARY KEY
,FOREIGN KEY
等等。
如果您在ALTER ..
语句中看到结果中有任何键名,则应修改它们并执行。
答案 2 :(得分:0)
在向已经有一些数据的表添加任何约束之前可能会导致此问题,尝试添加没有数据的约束