2011-08-11 4 views
2

Qu'est-ce qui ne va pas avec ma syntaxe?mysql Trigger On insert

CREATE 
    TRIGGER db_dhruniversity.trigger1 
    AFTER INSERT 
    ON jos_dhruprofile 
    FOR EACH ROW 
BEGIN 
UPDATE jos_users 
    SET jos_users.department = jos_dhruprofile.department 
    WHERE jos_users.id = jos_dhruprofile.uid 
END 
+1

pouvez-vous afficher le message d'erreur de compilation? – heximal

Répondre

2

Il n'y a pas délimiteur il:

DELIMITER || 

CREATE 
    TRIGGER db_dhruniversity.trigger1 
    AFTER INSERT 
    ON jos_dhruprofile 
    FOR EACH ROW 
BEGIN 
UPDATE jos_users 
    SET jos_users.department = NEW.department 
    WHERE jos_users.id = NEW.uid; 
END || 

DELIMITER; 
+0

Je suppose que ma logique est ce qui ne fonctionne pas .. – Tony77

+0

peut-être nous dire ce que vous voulez réaliser alors? – Mchl

+0

J'ai deux tables, l'une est appelée userprofile l'autre est appelé utilisateurs Chaque fois qu'un nouvel enregistrement est inséré dans userprofile Je veux mettre à jour les « utilisateurs » de table cette structure mockup Table -userprfile id uid nom département Table utilisateurs id nom email service (voulez mettre à jour ce champ sur chaque insert de la userprofiletable) Comme maintenant, la table userprofile correspond aux utilisateurs sur uid = id, il n'y a pas de contratins, ou de clés étrangères, dont j'aurais probablement besoin, pas sûr ,,, Comment puis-je faire ceci? Merci d'avance ..... – Tony77

4

La syntaxe devrait être comme suit:

DELIMITER $$ /* if you're not using an editor, you must change the delimiter*/ 

CREATE 
    TRIGGER ai_jos_dhruprofile_each 
    AFTER INSERT 
    ON jos_dhruprofile 
    FOR EACH ROW 
BEGIN 
    UPDATE jos_users 
    SET jos_users.department = NEW.department 
    WHERE jos_users.id = NEW.uid; /*<<<--- ; after every stament */ 
END $$ /* changed delimiter after the end */ 

DELIMITER ; /*make sure you set the delimiter back to the default*/ 

Note sur le schéma de nommage pour les déclencheurs
Je vous recommande nommer votre déclencheur ai (ce qui signifie after insert) afin que vous sachiez quand il se déclenche quelle table, plutôt qu'un nom sans signification comme: db_dhruniversity.trigger1.
J'utilise toujours [a/b] + [d/i/u] _tablename_each comme TRIGGERNAME, de cette façon, je sais toujours quand les déclencheurs feux (avant/après) pour lequel l'événement (insertion/suppression/mise à jour) et sur quelle table.

Il est également recommandé de documenter que le déclencheur se déclenche sur la ligne each, d'où le each à la fin du nom du déclencheur.

Notez que MySQL ne prend pas en charge les déclencheurs qui se déclenchent une fois par instruction mais (mais cela pourrait changer à l'avenir).