2010-05-13 5 views
1

Je suis en train de mettre en place un déclencheur MySQL qui effectue les opérations suivantes:Création d'un déclencheur MySQL pour vérifier les données sur une autre table

  • Quand quelqu'un insère des données dans databaseA.bills, il vérifie si databaseB.bills déjà a cette ligne, si ce n'est pas le cas, alors elle fait un insert supplémentaire dans databaseB.bills.

Voici ce que j'ai:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills 
FOR EACH ROW 
    BEGIN 
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN 
     INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber) 
    END IF 
    END;// 
DELIMITER ; 

Le problème est, je ne peux pas créer via la console de MySQL ou phpMyAdmin. Il renvoie des erreurs de syntaxe près de END IF END, et je suis sûr que c'est un problème de délimiteur.

#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 'END IF END' at line 6 

Qu'est-ce que je fais mal?

Répondre

1

Si vous avez des index uniques que vous pouvez toujours faire une INSERT IGNORE

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills 
    FOR EACH ROW 
     BEGIN 
      INSERT IGNORE INTO databaseB.bills (billNumber) VALUES (NEW.billNumber); 
     END // 
+0

Eh bien, je fini par utiliser cette requête plus courte, puisque oui, billNumber était un index unique. Toutes les autres réponses étaient également correctes. –

1

En supposant que vous utilisez // comme séparateur, il vous suffit d'utiliser des points-virgules à la fin des stmts sql à l'intérieur du corps de la gâchette et utiliser // après le déclenchement END:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills 
FOR EACH ROW 
    BEGIN 
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN 
     INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber); 
    END IF; 
    END // 
Questions connexes