繁体   English   中英

添加外键时出错

[英]Error while adding Foreign key

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

似乎表Personal_Details包含的数据可能包含一些带有Login_Id的行,而该行的条目不在表Login

如果是这种情况,那么解决方案是您需要将数据移动到另一个表,然后添加约束。 添加约束后,您需要将所有行加回表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 ..语句中使用的结果中看到任何键名,则应该对其进行修改并执行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM