MYSQL:erreur syntaxe trigger

novasuper -  
 Le marocain -
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. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    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
  2. Le marocain
     
    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