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 と、親 ID が cat1 のサブカテゴリ cat1_child を挿入しました。
ここで、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 も削除されます。
エラーはどこにありますか? あなたより。