IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Trigger After Insert


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut Trigger After Insert
    Bonjour,

    Je viens de remarquer que sous MySql, lorsque l'on utilise le trigger "after insert" sur une table, la ligne n'est insérée dans la table qu'une fois que le traitement du trigger est exécuté, ou en tout cas l’enregistrement n'est visible qu'a ce moment la, je m'explique :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TRIGGER `t1` AFTER INSERT ON `test` FOR EACH ROW BEGIN
     
    -- ... ici le traitement du trigger s'éxécute
     
    -- ... ici la ligne est insérée , et non pas avant 
     
    END;

    Un petit exemple pour tester :

    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
    25
    26
    27
    -- création de la table
    CREATE TABLE IF NOT EXISTS `test` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `field1` int(11) DEFAULT NULL,  
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
     
    -- création du trigger
    DROP TRIGGER IF EXISTS  `t1` ;
    CREATE TRIGGER `t1` AFTER INSERT ON `test` FOR EACH ROW BEGIN
     
    	-- traitement quelconque qui prends tu temps
    	SET @CPT=1;
    	WHILE
    			@CPT < 5000000
    		DO 	
    			SET @CPT=@CPT+1;
    	END WHILE;
     
    END;
     
    -- insertion d'une données, pour déclencher le trigger
    INSERT INTO  `test` (field1`) VALUES (1);
     
     
    -- après l'insertion, si on effectue cette requête de select plusieurs fois , on vois que la ligne n'est insérée qu’après un certain délais, ce délaiscorrespondant au traitement inclus dans le trigger
    select * from `test`;
    Quel le traitement soit dans le code du trigger directement ou dans une procédure stockée, le comportement semble le même ....

    Avez vous déjà remarqué ce comportement ? Existe il une astuce pour que la ligne soit insérée avant que le traitement du trigger s'exécute ?

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    les triggers font partie de la transaction donc c'est normal...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    J'avais l'impression que ce n'étais pas le cas sur d'autres bases de données comme Oracle....je vais tester

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    à ma connaissance c'est vrai pour tous les sgbd...

    c'est normal que le trigger en fasse partie vu que celui before sert à éventuellement annuler la transaction et celui d'après à faire plutôt des actions connexes (genre mise à jour d'autre tables)...

    si tu veux faire une action hors d'une transaction c'est pas dans un trigger qu'il faut la mettre...

    les actions sont en autocommit par défaut à savoir

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    en fait , par ex dans le cas ou le trigger exécute une procédure stockée dont le temps de traitement est assez long, cela me paraissait "étrange" de ne voir l'insert de l'enregistrement qu'a la fin de ce traitement

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    En tout cas, merci de ta réponse

  7. #7
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    après c'est aussi le soucis de passer par un trigger ou une procédure stockée carrément... selon le besoin...

    mais c'est vrai qu'il faut faire attention aux avantages et inconvénients de chaque technique et en plus en fonction du niveau d'isolation car ça peut jouer sur les locks aussi du coup...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    oui tout à fait

Discussions similaires

  1. Trigger after insertion pas validée
    Par guigeek dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/12/2006, 13h37
  2. Trigger after insertion pas validée
    Par guigeek dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 19/12/2006, 14h23
  3. Un Trigger After INSERT peut-il empêcher l'INSERT ?
    Par cian2006 dans le forum Oracle
    Réponses: 3
    Dernier message: 13/09/2006, 17h27
  4. Trigger after insert, sans each row, possible ??
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2006, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo