添加外键时出错

时间:2014-01-22 06:58:07

标签: mysql sql foreign-keys innodb foreign-key-relationship

我正在使用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)

3 个答案:

答案 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 KEYFOREIGN KEY等等。

如果您在ALTER ..语句中看到结果中有任何键名,则应修改它们并执行。

答案 2 :(得分:0)

在向已经有一些数据的表添加任何约束之前可能会导致此问题,尝试添加没有数据的约束