MYSQL:erreur syntaxe trigger

Fermé
novasuper - 7 mai 2009 à 11:55
 Le marocain - 18 juil. 2009 à 17:24
salut,

j'essaie de créer un trigger avec MySQL (j'utilise EasyPHP) mais je reçois toujours la même erreur :

</code>
#1064 - Erreur de syntaxe près de 'BEGIN DELETE FROM tab2 WHERE tab2ID = old.tab1ID' à la ligne 3
</code>

le but de mon trigger est de supprimer les lignes dans tab2 (qui correspond à l'enregistrement du tab1) avant la suppression de la ligne dans tab1
CREATE TRIGGER test 
BEFORE DELETE ON tab1
BEGIN
DELETE FROM tab2 WHERE tab2ID = old.tab1ID
 


j'ai essayé plusieurs autres exemple de trigger mais aucun n'a marché.

2 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 387
7 mai 2009 à 17:52
Bonjour,

Je pense que la syntaxe exacte d'un trigger est la suivante:
CREATE TRIGGER test 
BEFORE DELETE ON tab1 FOR EACH ROW
BEGIN
DELETE FROM tab2 WHERE tab2ID = old.tab1ID
END

A plus
0
Bonjour,

moi aussi j'avais un problème pour les trigger sous Mysql mais j'ai réussi "hamdolilah" à réalisé deux exemples qui marche, bien à vous ts.

voilà un 1er exemple :


delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END//
delimiter ;



2ème exemple :


drop trigger cont_depart_update;

DELIMITER //
CREATE TRIGGER cont_depart_update AFTER UPDATE ON tacheassigne
FOR EACH ROW
BEGIN
DECLARE idProjet varchar(20);
DECLARE moyenneAcompli varchar(5);
select p.idp into @idProjet
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta=New.idta;

select avg(ta.accompli) into @moyenneAcompli
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta in (select ta.idta from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where p.idp=@idProjet)
group by p.idp;
update projet set accompli=@moyenneAcompli where idp=@idProjet;
END//
delimiter;



/////////////////////////////////////////////////////////////////////////////////
RQ :
* en mysql c'est "NEW" c'est pas comme ORACLE ":NEW"
* utiliser les delimiter (existe aussi au niveau de la console de mysql)
* l'appel des varriables c'est avec "@" et non & comme ORACLE
/////////////////////////////////////////////////////////////////////////////////
0