MYSQL:erreur syntaxe trigger

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é.
Configuration: Windows XP
Firefox 3.0.5

2 réponses

  1. 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
    1. 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
      /////////////////////////////////////////////////////////////////////////////////