我使用MySQL工作台。 我已经作出了桌子上。 现在,我想添加一个表的外键被称为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回添加所有行表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 ..
语句,你应该对其进行修改和执行。