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');
Таким образом, эта таблица представляет собой категорию с идентификатором и самонаводящимся родительским идентификатором. Я вставил категорию cat1 и подкатегорию cat1_child с родительским идентификатором cat1.ОШИБКА 1451: Не удается удалить или обновить родительскую строку: ограничение внешнего ключа завершено.
Теперь, я хочу, чтобы иметь возможность изменять idcategory cat1 с 1 по 10, и поскольку я устанавливаю внешний ключ при обновлении CASCADE, я ожидаю, что idparent cat1_child будет установлен на 10. Но когда я делаю:
UPDATE `categories` SET `idcategories`=10 WHERE `idcategories`='1';
Я получаю сообщение об ошибке:
ERROR 1451: Cannot delete or update a parent row: a foreign key constraint fails (
categories
, CONSTRAINTFK_idparent
FOREIGN KEY (idparent
) REFERENCEScategories
(idcategories
) ON DELETE CASCADE ON UPDATE CASCADE) SQL Statement: UPDATEcategories
SETidcategories
=10 WHEREidcategories
='1'
поле Удалять вместо работать, как и ожидалось, и удаление cat1, cat1_child будут удалены, а также.
Где ошибка? Чем вы.
возможно дубликат [MySQL: ON UPDATE CASCADE для простой таблицы «ID | родитель «текст», невозможно?] (http://stackoverflow.com/questions/5446517/mysql-on-update-cascade-for-a-simple-table-idparenttext-not-possible) – mellamokb