Em que ordem são processadas as restrições ON DELETE CASCADE?

Aqui está um exemplo do que eu estou acontecendo:

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;

Observe que não há CASO EXCLUSIVO para o relacionamento tio-filho; ou seja, excluir um filho não exclui seu tio e vice-versa.

Quando tenho um pai e um tio com o mesmo filho, e excluo o pai, ele parece como o InnoDB deve ser capaz de "descobrir" e deixar a cascata se espalhar por toda a família (ou seja, excluir o pai exclui o tio e o filho também). No entanto, em vez disso, recebo o seguinte:

  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 está tentando excluir em cascata o filho antes do tio que se refere a el

Estou esquecendo de algo? É istosupost falhar por algum motivo eu não entendo? Ou existe algum truque para fazê-lo funcionar (ou é um bug no MySQL)?

questionAnswers(4)

yourAnswerToTheQuestion