Привет, Тони. Проблема в том, что это всего лишь пример; в реальной жизни таблицы не содержат одни и те же данные вообще. Это был простой способ проиллюстрировать отношения.
ример того, что у меня происходит:
CREATE TABLE Parent (id BIGINT NOT NULL,
PRIMARY KEY (id)) ENGINE=InnoDB;
CREATE TABLE Child (id BIGINT NOT NULL,
parentid BIGINT NOT NULL,
PRIMARY KEY (id),
KEY (parentid),
CONSTRAINT fk_parent FOREIGN KEY (parentid) REFERENCES Parent (id) ON DELETE CASCADE) ENGINE=InnoDB;
CREATE TABLE Uncle (id BIGINT NOT NULL,
parentid BIGINT NOT NULL,
childid BIGINT NOT NULL,
PRIMARY KEY (id),
KEY (parentid),
KEY (childid),
CONSTRAINT fk_parent_u FOREIGN KEY (parentid) REFERENCES Parent (id) ON DELETE CASCADE,
CONSTRAINT fk_child FOREIGN KEY (childid) REFERENCES Child (id)) ENGINE=InnoDB;
Обратите внимание, что в отношении дядя-ребенок нет ON DELETE CASCADE; то есть удаление ребенка не удаляет его дядю (ов), и наоборот.
Когда у меня есть родитель и дядя с тем же ребенком, и я удаляю родителя, этокажется как InnoDB должен быть в состоянии просто «разобраться» и позволить каскаду расползаться по всей семье (то есть удаление родителя удаляет также дядю и ребенка). Однако вместо этого я получаю следующее:
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`cascade_test/uncle`, CONSTRAINT `fk_child` FOREIGN KEY (`childid`) REFERENCES `child` (`id`))
InnoDB пытается каскадно удалить ребенка перед дядей, которые ссылаются на него.
Я что-то пропустил? Этопредполагаемый потерпеть неудачу по какой-то причине я не понимаю? Или есть какая-то хитрость, чтобы заставить это работать (или это ошибка в MySQL)?