mysql - 无法添加或更新子行: a foreign key constraint fails

标签 mysql sql innodb

我有一张 table

1.

CREATE TABLE `Parent` (
`ID` bigint(19) NOT NULL DEFAULT '0',
 PRIMARY KEY (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.

CREATE TABLE `Child_1` (
`ParentID` bigint(19) NOT NULL DEFAULT '0',
`ID` bigint(19) NOT NULL DEFAULT '0',
PRIMARY KEY (`ParentID`,`ID`),
KEY `Child_1_FK1_IDX` (`ParentID`,`ID`),
CONSTRAINT `Child_1_FK1` FOREIGN KEY (`ParentID`, `ID`) REFERENCES `Child_2` (`ParentID`,   `ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.

CREATE TABLE `Child_2` (
`ParentID` bigint(19) NOT NULL DEFAULT '0',
`ID` bigint(19) NOT NULL DEFAULT '0',
PRIMARY KEY (`ParentID`,`ID`),
KEY `Child_2_FK1_IDX` (`ParentID`),
CONSTRAINT `Child_2_FK1` FOREIGN KEY (`ParentID`) REFERENCES `Parent` (`ParentID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

不幸的是,我删除了第二个表约束。

CONSTRAINT `Child_1_FK1` FOREIGN KEY (`ParentID`, `ID`) REFERENCES `Child_2` (`ParentID`,   `ID`) ON DELETE CASCADE

我怎样才能恢复它?

最佳答案

试试这个(未测试):

ALTER TABLE Child_1
ADD FOREIGN KEY (`ParentID`, `ID`) 
REFERENCES `Child_2` (`ParentID`,   `ID`) 
ON DELETE CASCADE

更新:

要获取违反约束的记录,请运行以下命令:

select child1.ID from 
   Child_1 child1 left join Child_2 child2 on child1.ParentID=child2.ParentID and  child1.ID=child2.ID
where child2.ID is null and child2.ParentID is null;

关于mysql - 无法添加或更新子行: a foreign key constraint fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18327470/

相关文章:

mysql - 我无法再以 root 身份访问 mysql

mysql - 无法将外键添加到我的表

php - 在页面上显示新记录数

php - Codeigniter 2.1 - MySQL 连接

php - MySQL查询用于重新分配图片中的标签并避免重复

mysql - 使用 ORDER BY 子句如何提高和降低性能?

mysql - 服务器快照可能会损坏 MySQL 事务吗?

sql - 获取受更新或插入影响的行数

sql - CASE WHERE 更改运算符 - SQL

php - 如何在mysql中的一个表中显示2个不同的数据(两个条件)