Привет, Тони. Проблема в том, что это всего лишь пример; в реальной жизни таблицы не содержат одни и те же данные вообще. Это был простой способ проиллюстрировать отношения.

ример того, что у меня происходит:

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)?

Ответы на вопрос(2)

Ваш ответ на вопрос