Mysql Déclencheur SI ALORS
Mon stockage INNODB,
Je suis en train de créer un déclencheur avec 2 requêtes dans l'instruction if.
Le bas, vous pouvez voir l'élément déclencheur qui me donne l'erreur
delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
FOR EACH ROW BEGIN
UPDATE counts SET count = count - 1 WHERE name = 'all';
IF OLD.published = 1 THEN
DELETE FROM videos_categories WHERE id_video = OLD.id;
DELETE FROM videos_tags WHERE id_video = OLD.id;
END IF;
END;
|
delimiter ;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= OLD.id;
END IF;
END' at line 6
Ce sont les 2 éléments déclencheurs qui je l'activer avec le premier.
delimiter |
CREATE TRIGGER count_delete_videos_tags AFTER DELETE ON videos_tags
FOR EACH ROW BEGIN
UPDATE tags SET count = count - 1 WHERE id = OLD.id_tag;
END;
|
delimiter ;
delimiter |
CREATE TRIGGER count_delete_videos_categories AFTER DELETE ON videos_categories
FOR EACH ROW BEGIN
UPDATE categories SET count = count - 1 WHERE id = OLD.id_category;
IF OLD.id_category <> 20 AND OLD.id_category <> 34 THEN
UPDATE counts SET count=count-1 WHERE name='english';
ELSEIF OLD.id_category = 34 THEN
UPDATE counts SET count=count-1 WHERE name='german';
ELSEIF OLD.id_category = 20 THEN
UPDATE counts SET count=count-1 WHERE name='italian';
END IF;
END;
|
delimiter ;
Mais celui-ci fonctionne parfaitement
delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
FOR EACH ROW BEGIN
UPDATE counts SET count = count - 1 WHERE name = 'all';
IF OLD.published = 1 THEN
DELETE FROM videos_categories WHERE id_video = OLD.id;
END IF;
END;
|
delimiter ;
Query OK, 0 rows affected (0.16 sec)
Comment puis-je faire le premier pas déclencher le travail? ce que je fais mal?
Merci de m'aider.
pourriez-vous donner la si la division par deux fois pour chaque instruction de suppression et de voir?
(Sauf pour les compteurs), savez-vous que vous pouvez avoir le même comportement avec une contrainte de Clé Étrangère (un de chaque tableau) à l'
oui, je sais, mais sur l'écart de touches déclenche à mysql de ne pas activer, donc je dois le supprimer avec un autre déclencheur pour cela des requêtes activer d'autres déclencheurs
(Sauf pour les compteurs), savez-vous que vous pouvez avoir le même comportement avec une contrainte de Clé Étrangère (un de chaque tableau) à l'
video
table, en définissant les FKs avec ON DELETE CASCADE
?oui, je sais, mais sur l'écart de touches déclenche à mysql de ne pas activer, donc je dois le supprimer avec un autre déclencheur pour cela des requêtes activer d'autres déclencheurs
OriginalL'auteur Alex Prut | 2012-04-29
Vous devez vous connecter pour publier un commentaire.
Aussi loin que je peux dire que les deux déclencheurs sont OK, mais vous pouvez essayer le suivant:
Et quelle est votre version de MySQL?
évidemment, vous devez supprimer les autres déclencheur avant d'ajouter celle-ci.
j'ai édité mon post. J'explique mieux mon problème, veuillez jeter un oeil. Thx
OK, le problème est résolu. Le problème c'est que j'avais 2 de déclenchement d'action sur la même table.
OriginalL'auteur Johan