bonjour,

j'ai plusieurs table

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
et un trigger

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
le probleme vient du fait que mysql ne lance pas le trigger si je delete un joueur

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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
FOREIGN KEY (idJoueur) REFERENCES Joueur (idJoueur) ON DELETE NO ACTION
en pensant qu'il n'y aurai pas de modification sur la table

puis créer un trigger

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
malheuereusement ca ne passe toujours pas

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
please help

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