CREATE TABLE `categories` (
`idcategories` INT NOT NULL AUTO_INCREMENT ,
`idparent` INT NULL ,
`description` VARCHAR(45) NULL ,
PRIMARY KEY (`idcategories`) );
ALTER TABLE `categories`
ADD CONSTRAINT `FK_idparent`
FOREIGN KEY (`idparent` )
REFERENCES `ilmercatinodelpulcino`.`categories` (`idcategories` )
ON DELETE CASCADE
ON UPDATE CASCADE
, ADD INDEX `FK_idparent` (`idparent` ASC) ;
INSERT INTO `categories` (`idcategories`, `description`)
VALUES (1, 'cat1');
INSERT INTO `categories` (`idcategories`, `idparent`, `description`)
VALUES (2, 1, 'cat1_child');
所以这个表代表一个类别,有一个 ID 和一个自指向的父 ID。我插入了一个类别 cat1 和一个子类别 cat1_child,其父 ID 为 cat1。
现在,我希望能够将 cat1 的 idcategory 从 1 更改为 10,并且因为我在更新 CASCADE 上设置了外键,所以我希望 cat1_child 的 idparent 也将设置为 10。但是当我这样做时:
UPDATE `categories` SET `idcategories`=10 WHERE `idcategories`='1';
我收到一个错误:
错误 1451:无法删除或更新父行:外键约束失败(
categories
,CONSTRAINTFK_idparent
FOREIGN KEY (idparent
) REFERENCEScategories
(idcategories
) ON DELETE CASCADE ON UPDATE CASCADE) SQL 语句:UPDATEcategories
SETidcategories
=10 WHEREidcategories
='1'
删除将按预期工作,并且删除 cat1、cat1_child 也将被删除。
错误在哪里?比你。