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

MySQL Discussion :

trigger update entre trois tables


Sujet :

MySQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Points : 4
    Points
    4
    Par défaut trigger update entre trois tables
    Bonjour,

    Je voudrais savoir comment je peux faire un trigger entre 3 tables...
    Quand je mets la table 1 à jour, je prends les données de la table, je les insert dans la table 3 sachant que la table1 et table2 sont liées par une clé étrangère.

    * Merci *

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut Christelle.

    Quand je mets la table 1 à jour, je prends les données de la table, je les insert dans la table 3 sachant que la table1 et table2 sont liées par une clé étrangère.
    Est-ce que tu veux dire que la table 1, ainsi que la table 2 sont des tables fils et la table 3 est la table père ?

    Si une nouvelle clef étrangère d'une table fils n'est pas déjà présente dans la table père, l'insertion sera rejeté.
    Je vais prendre un exemple d'après ce que j'ai compris de ton problème.
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `pere`
    --------------
     
    --------------
    CREATE TABLE `pere`
    (
            `clef`    INT UNSIGNED NOT NULL PRIMARY KEY,
            `nombre`  char(20)         NULL DEFAULT NULL
    )       ENGINE=InnoDB
            DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
            ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `pere` (`clef`,`nombre`) values (1, 'un')
    --------------
     
    --------------
    DROP TABLE IF EXISTS `fils`
    --------------
     
    --------------
    CREATE TABLE `fils`
    (
      `clef`    INT UNSIGNED NOT NULL PRIMARY KEY,
      `number`  char(20)         NULL DEFAULT NULL,
      FOREIGN KEY (`clef`)
        REFERENCES `pere` (`clef`)
        ON UPDATE CASCADE
            ON DELETE CASCADE
    )       ENGINE=InnoDB
            DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
            ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `fils` (`clef`,`number`) values (1, 'one')
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `ajout`
    --------------
     
    --------------
    CREATE TRIGGER `ajout`
    BEFORE INSERT ON `fils`
    FOR EACH ROW BEGIN
      if not exists (select 1 from pere where clef=new.clef) then
        insert into pere (clef, nombre) value (new.clef, null);
      end if;
    END
    --------------
     
    --------------
    insert into `fils` (`clef`, `number`) values (2, 'two')
    --------------
     
    --------------
    select * from `pere`
    --------------
     
    +------+--------+
    | clef | nombre |
    +------+--------+
    |    1 | un     |
    |    2 | NULL   |
    +------+--------+
    --------------
    select * from `fils`
    --------------
     
    +------+--------+
    | clef | number |
    +------+--------+
    |    1 | one    |
    |    2 | two    |
    +------+--------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Sans le trigger, l'insertion de '2, two' sera rejeté.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Points : 4
    Points
    4
    Par défaut trigger entre 3 update entre 3 table mysql
    bjr j'ai 3 table la table1 est le père de la table2 apres un update de la table 1 on recupère l 'id du tuple qu'on vient de modifier et on le compare avec la clé étrangère contenu dans la table 2 afin de recupérer le tuple correspondant qu'on va inserer dans la table 3 en gros on fait un trigger after update on table1 insert into table 3 les valeurs de la table 2 where id(du tuple modifié)= id(qui est la clé étrangère contenu dans la table 2) j'espère que mon besoin est clair

Discussions similaires

  1. [Conception]Lien plusieurs à plusieurs entre trois table
    Par egg3774 dans le forum Modélisation
    Réponses: 5
    Dernier message: 20/04/2007, 17h44
  2. UPDATE entre 2 tables
    Par dafalri dans le forum Requêtes
    Réponses: 12
    Dernier message: 29/11/2005, 15h12
  3. [debutant]problematique entre trois tables
    Par djodjo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/08/2005, 15h21
  4. requete entre trois tables
    Par fpouget dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/03/2005, 21h44
  5. Update entre 2 tables
    Par jfox dans le forum SQL
    Réponses: 8
    Dernier message: 04/11/2003, 10h22

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