J'ai tables quelque chose commeCascade sur Supprimer sur les tableaux emboîtés
CREATE TABLE A (
Z INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (Z)
) ENGINE=InnoDB;
CREATE TABLE B (
Y INT NOT NULL,
Z INT NOT NULL,
PRIMARY KEY (Y , Z),
FOREIGN KEY (Z)
REFERENCES A (Z)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE C (
Y INT NOT NULL,
Z INT NOT NULL,
PRIMARY KEY (Y , Z),
FOREIGN KEY (Y)
REFERENCES B (Y)
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (Z)
REFERENCES B (Z)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
INSERT INTO A VALUES (1);
INSERT INTO A VALUES (2);
INSERT INTO A VALUES (3);
INSERT INTO B VALUES (4, 2);
INSERT INTO B VALUES (3, 1);
INSERT INTO B VALUES (3, 3);
INSERT INTO B VALUES (4, 3);
INSERT INTO C VALUES (3, 1);
INSERT INTO C VALUES (4, 2);
Si je
DELETE FROM A WHERE Z=3
mises à jour B correctement et C ne fonctionne pas.
Si je
DELETE FROM B WHERE Z=3
mises à jour B correctement et C ne fonctionne pas. C sur la cascade est en train de laisser tomber des rangs sans aucun rapport avec quoi que ce soit. En fait, aucune de ces commandes de suppression ne devrait même arriver à C.
Pourquoi est-ce que cela nuke la table C? L'une ou l'autre des suppressions doit supprimer (3,3) et (4,3) dans le tableau B et s'arrêter.