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 :

modification d'un champs par trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut modification d'un champs par trigger
    salut
    j'ai un souci concernant les triggers, j'essaie de mettre comme un ptit test un champs en majuscule
    je mets
    CREATE TRIGGER maj_field before insert on inscrits
    for each row
    begin
    update inscrits set new.Nom=upper(new.Nom);
    end
    ça marche pas ..syntaxe fausse ou je ne sais quoi (je deteste les messages d'erreurs de phpmyadmin ça montre rien).
    bref, ce que j'essaie de faire c'est incremonter le nombre de message pour chaque inscrit à chaque insertion d'un nouveau message, j'ai deux tables en relation une table inscrits et une table messages, biensure l'Id_inscrit de la table inscrits et une clé etrangere vers la table messages.
    voilà je sais pas comment proceder déjà je me bloque dans cette syntaxe de mettre en maj un champs, alors comment je peux faire pour faire ça
    je compte beaucoup sur vous
    merci en avance

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 947
    Par défaut
    Le déclencheur ne peut pas faire référence directe aux tables par leur nom, y copmris la table à laquelle il est associé
    http://dev.mysql.com/doc/refman/5.0/...-triggers.html


    "update inscrits" est manifestement de trop.

  3. #3
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    salut gi130
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    euh, c pour moi cette citation?
    bref,j'ai déjà corrigé, je devais ajouter une reponse ici lol
    c bien pas de update inscrits juste un set suffit, mais ça m'aide pas trop sur ce que je cherche à faire, j'ai déjà dis ça....je cherche à modifier un champs qui se trouve dans une autre table, cad quand j'ajoute un enregistrement dans la table qui contient le trigger, un champs qui se trouve dans une autre table doit etre modifié.
    j'explique plus clairement ce que j'essaie de faire,voilà, j'ai deux tables en relation..
    inscrits(Id_inscrit,nom,prenom,..,nb_message)et
    messages(Id_message,contenu,#Id_inscrit)
    l'ajout d'un nouveau enregistrement dans la table message doit incremonter le nb_message dans la table inscrits.
    je sais pas comment faire ça si je suis sensé ne pas utiliser de nom de table
    note: j'ai déjà fais ça sur sqlserver voilà le code :
    create trigger add_msg
    on messages for insert
    as
    declare @id integer,@nb integer
    set @id=(select i.id_inscrit from inserted i,inscrits ins where i.Id_inscrit=ins.Id_inscrit)
    set @nb=(select nb_message from inscrits where id_inscrit=@id)
    begin
    update inscrits set nb_message=@nb+1 where id_inscrit=@id
    end
    comment traduire ça en mysql?
    merci.

  4. #4
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    salut
    j'ai fais des recherches pour comprendre plus la syntaxe de mysql et j'ai trouvé ce lien
    http://dev.mysql.com/doc/refman/5.0/...e-trigger.html
    j'ai c/c le code du l'exemple suivant:
    CREATE TABLE test1(a1 INT);
    CREATE TABLE test2(a2 INT);
    CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
    CREATE TABLE test4(
    a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    b4 INT DEFAULT 0
    );

    CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END;
    mais ça m'affiche une erreur sur le trigger..
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test2 SET a2 = NEW.a1' at line 3
    la syntaxe parait fausse, ça met une croix rouge sur INSERT INTO test2

    pourtant c la syntaxe correcte que j'ai trouvé dans le manuel mysql 5.0, c bien la version que j'utilise

  5. #5
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 947
    Par défaut
    Quelle est le numéro de version exact et complet de MySQL ?

  6. #6
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    salut
    voilà le numero exacte de la version
    Version du client MySQL: 5.0.37
    aussi la constante php_version m'affiche :5.2.3

  7. #7
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 947
    Par défaut
    Citation Envoyé par witch17 Voir le message
    salut
    voilà le numero exacte de la version
    Version du client MySQL: 5.0.37
    aussi la constante php_version m'affiche :5.2.3
    Mauvaise question de ma part

    Je précise : la version du serveur

  8. #8
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    lol j'ai pensé à mettre ça mais je me suis dis c pas necessaire ce qui compte le plus ce la version du mysql voilà
    Version du serveur: 5.0.41-
    j'ai fais même un print screen de phpmyadmin ou il ya tous sur les versions je le join ici, en fait j'utilise wamp5

  9. #9
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    je peux plus attacher des fichiers ici
    pas grave j'utilise un lien pour ça
    voilà http://i21.tinypic.com/10ekeah.jpg

  10. #10
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    merci pour votre aide

  11. #11
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    je touve même pas de doc sur ça pas assez, et ça m'aide pas ce que je trouve http://dev.mysql.com/doc/refman/5.0/...e-trigger.html
    versions:
    Version du client MySQL: 5.0.37
    Version du serveur: 5.0.41-community-nt
    Version du protocole: 10
    j'ai essayé le code mais vu que je peu pas mettre de trigger avec une syntaxe...
    CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END;

    je vois pas comment je peux faire autrement?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Salut,
    essaye un truc du genre :

    DELIMITER |
    CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END|

    Attention , pour PhpMyAdmin tu as juste a modifier le Delimiteur (en dessous de la fenetre SQL) càd :

    tu fait la requete ci desssous:
    CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END|
    Mais tu change le delimiteur en |

    Voila esperant t'avoir aidé

  13. #13
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    salut 2_high
    je croyais que ça aller marcher ce truc de delimiteur mais j'ai essayé tout ce qui est possible à essayer avec ça mais ça passe pas
    si j'execute ça..
    |CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END|

    ça me donne cette erreur:
    check the manual that corresponds to your MySQL server version for the right syntax to use near '|CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO ' at line 1
    mais je crois que le probleme vient de la syntaxe donc j'ai cette erreur sans delimiteur:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test2 SET a2 = NEW.a1' at line 3
    snif

  14. #14
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    je me demande si vraiment ce ptit probleme de syntaxe n'a pas de solution :S
    bon pour mon probleme ..j'aurais du essayer de faire ce que je veux directement, passer par la doc, mais fermer l'oeil sur les exemples qu'y sont mis
    bref, j'ai reussi mon ptit bout de script qui était très facile à ecrire après avoir lu la doc correspendante, mais ça m'a appris quand même des choses...
    sans ce probleme j'aurais pas à lire et essayer de trouver des indices pour deduire le probleme, voilà c'était juste ça ce que je voulais
    create trigger add_message before insert on messages
    for each row
    update inscrits set nombre_message=nombre_message+1 where

    id=new.id_inscrit
    merci pour me laisser emmerder avec mes ptit problemes de con
    ça aide quand même de savoir debrouiller seul c dure, surtout quand tu est trop stressé par d'autre choses plus importantes.
    a+

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Citation Envoyé par witch17 Voir le message
    salut 2_high
    je croyais que ça aller marcher ce truc de delimiteur mais j'ai essayé tout ce qui est possible à essayer avec ça mais ça passe pas
    si j'execute ça..
    |CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END|

    .....
    Salut,
    Pour les delimiteur il ne fauit pas mettre de delimiteur au debut de la requete, uniquement a la fin
    essaye ca (t plus a ca près )
    Pour PhpMyAdmin :

    CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END|

    En mettant bien dans le champ DELIMITEUR la valeur "|" (Sans les guillement bien entendu :p

    Sinon si tu utilise un truc du genre MySQL Query browser tu fait :



    DELIMITER |
    CREATE TRIGGER testref BEFORE INSERT ON test1
    FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    END|


    n'hesite pas a faire un copier coller

    Voila,
    2-high


    P.S : Oopx je m'etait arrete au premier post après le mien ! Ceci dit moi dans mes triggers g bien des BEGIN ..

  16. #16
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    2-high you're not enough too high, look the number of messages that you have gotten, you're new in this forum, it's clear..lol
    c'était pour plaisenter
    c pas une question de delimiteur que ça passe pas, avec ou sans delimiteur à la fin ça m'affiche cette erreur
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test2 SET a2 = NEW.a1' at line 3

    il aime pas la requete insert into test2.. , j'ai essayé à la place update test2 set a2=new.a1 ,mais ça aime pas non plus
    c pas grave j'ai pas besoin de ça pour l'instant
    merci

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut ....
    Ok j'insite pas.

    Je disait ca juste parce que j'avais eu exactement le meme message d'erreur a cause d'une histoire de delimiteur et que après y avoir passé plusieur minutes j'etait vert juste a cause de ca !

    Voila bonne continuation.

    2-high

  18. #18
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    salut 2-high
    merci pour tes reponses ça m'a aidé quand même, parce que avant que tu reponds j'avais laissé tombé le truc
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Maintenir un champs par trigger
    Par Jean-Jacques Engels dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 07/12/2010, 10h40
  2. [FB 1.5]modifier 2 champs par un trigger
    Par Moine dans le forum SQL
    Réponses: 1
    Dernier message: 24/11/2007, 08h37
  3. Réponses: 2
    Dernier message: 05/02/2007, 17h09
  4. Evenement déclenché par la modif d'un champ
    Par Virgile le chat dans le forum Langage
    Réponses: 2
    Dernier message: 01/12/2006, 09h11
  5. Réponses: 7
    Dernier message: 04/10/2005, 17h34

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