bonjour,
j'ai plusieurs table
et un triggerCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 CREATE TABLE Spacewar.Element ( idElement INT NOT NULL AUTO_INCREMENT, positionX INT DEFAULT NULL, positionY INT DEFAULT NULL, PRIMARY KEY (idElement) ) ENGINE = InnoDB; CREATE TABLE Spacewar.Joueur ( idJoueur INT NOT NULL AUTO_INCREMENT, login VARCHAR (30) NOT NULL, password VARCHAR (30) NOT NULL, mail VARCHAR (50) NOT NULL, PRIMARY KEY (idJoueur) ) ENGINE = InnoDB; CREATE TABLE Spacewar.Vaisseau ( idVaisseau INT NOT NULL AUTO_INCREMENT, idElement INT NOT NULL, idJoueur INT NOT NULL, PRIMARY KEY (idVaisseau), FOREIGN KEY (idElement) REFERENCES Element(idElement) ON DELETE RESTRICT, FOREIGN KEY (idJoueur) REFERENCES Joueur (idJoueur) ON DELETE CASCADE ) ENGINE = InnoDB;
le probleme vient du fait que mysql ne lance pas le trigger si je delete un joueurCode:
1
2
3
4
5 CREATE TRIGGER delVaisseau AFTER DELETE ON Vaisseau FOR EACH ROW BEGIN DELETE FROM Spacewar.Element WHERE idElement = OLD.idElement; END;
et donc les vaisseaux qui font référence au joueur que je delete sont bien deletés aussi mais le trigger n'est pas déclenché et je me retrouve avec des enregistrements dans la table Element qui ne sont plus référencés ...
comment je peux faire ?
j'ai pensé mettre dans la table Vaisseau
en pensant qu'il n'y aurai pas de modification sur la tableCode:
1
2 FOREIGN KEY (idJoueur) REFERENCES Joueur (idJoueur) ON DELETE NO ACTION
puis créer un trigger
malheuereusement ca ne passe toujours pasCode:
1
2
3
4
5 CREATE TRIGGER delJoueur AFTER DELETE ON Joueur FOR EACH ROW BEGIN DELETE FROM Spacewar.Vaisseau WHERE idJoueur = OLD.idJoueur; END;
please helpCode:
1
2#1451 - Cannot delete or update a parent row: a foreign key constraint fails (`spacewar`.`vaisseau`, CONSTRAINT `vaisseau_ibfk_3` FOREIGN KEY (`idJoueur`) REFERENCES `joueur` (`idJoueur`) ON DELETE NO ACTION)
ca me parait etre un bete probleme mais je vois vraiment pas comment faire
ps:les tables sont plus compliquées, je les ai réduites au minimum pour ne garder que mon problème, donc il est possible que ce schéma n'ai pas beaucoup de sens