Załóżmy, że mam dwie poniższa tabela:MySQL ON UPDATE CASCADE nie CASCADEing
CREATE TABLE post (
id bigint(20) NOT NULL AUTO_INCREMENT,
text text ,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE post_path (
ancestorid bigint(20) NOT NULL DEFAULT '0',
descendantid bigint(20) NOT NULL DEFAULT '0',
length int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (ancestorid,descendantid),
KEY descendantid (descendantid),
CONSTRAINT f_post_path_ibfk_1
FOREIGN KEY (ancestorid) REFERENCES post (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT f_post_path_ibfk_2
FOREIGN KEY (descendantid) REFERENCES post (id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB;
i wstawia te wiersze:
INSERT INTO
post (text)
VALUES ('a'); #// inserted row by id=1
INSERT INTO
post_path (ancestorid ,descendantid ,length)
VALUES (1, 1, 0);
Kiedy chcę zaktualizować po rząd ID:
UPDATE post SET id = '10' WHERE post.id =1
MySQL powiedział:
#1452 - Cannot add or update a child row: a foreign key constraint fails (test.post_path, CONSTRAINT f_post_path_ibfk_2 FOREIGN KEY (descendantid) REFERENCES post (id) ON DELETE CASCADE ON UPDATE CASCADE)
Dlaczego? co jest nie tak?
Edit:
Po włożeniu tych rzędów:
INSERT INTO
post (text)
VALUES ('b'); #// inserted row by id=2
INSERT INTO
post_path (ancestorid, descendantid, length)
VALUES (1, 2, 0);
I aktualizacja:
UPDATE post SET id = '20' WHERE post.id =2
Mysql zaktualizowaną powodzeniem zarówno dziecko i rodzic rząd. więc dlaczego nie mogę uaktualnić pierwszy post (id = 1)?
odpowiedź jest w błędzie. –
Instrukcja aktualizacji próbuje zaktualizować kolumnę auto_increment, której nie można wykonać. –
Hmmm nie wiedział, że możesz ręcznie zaktualizować kolumnę auto_increment. Nawet jeśli możesz, nie powinieneś. –