2015-02-01 15 views
6

Ich möchte Trigger erstellen und ich habe diese Abfrage geschrieben, aber das wird nicht ausgeführt. Bitte überprüfen Sie meine AnfrageSQL-Syntax Fehler beim Erstellen von Trigger

CREATE 
    TRIGGER 'blog_after_insert' AFTER INSERT 
    ON 'blog' 
    FOR EACH ROW BEGIN 

     IF NEW.deleted THEN 
      SET @changetype = 'DELETE'; 
     ELSE 
      SET @changetype = 'NEW'; 
     END IF; 

     INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype); 

ich diesen Fehler

#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 ''blog_after_insert' AFTER INSERT 
    ON 'blog' 
    FOR EACH ROW BEGIN 

     IF NEW.del' at line 2 
+2

Entfernen Sie einfach die Anführungszeichen. – SMA

+0

Verwenden Sie nur einfache Anführungszeichen für String- und Datumskonstanten. –

Antwort

12

Bitte führen Sie diese Abfrage

DELIMITER $$ 
CREATE 
    TRIGGER blog_after_insert AFTER INSERT 
    ON blog 
    FOR EACH ROW BEGIN 

     IF NEW.deleted THEN 
      SET @changetype = "DELETE"; 
     ELSE 
      SET @changetype = "NEW"; 
     END IF; 

     INSERT INTO audit (blog_id, changetype) VALUES (NEW.id, @changetype); 

    END$$ 
DELIMITER ; 
0

Einfache Anführungszeichen bin immer (') bezeichnen Stringliterale - Objektnamen, wie Trigger und Tabellen sollten vorwärts Anführungszeichen oder ohne Anführungszeichen überhaupt:

CREATE 
    TRIGGER blog_after_insert AFTER INSERT -- here 
    ON blog -- and here 
    FOR EACH ROW BEGIN 
    -- rest of code... 
+0

Ich habe die Änderungen gemacht, die Sie mir vorgeschlagen haben, aber immer noch Fehler .. Bitte schauen Sie in meine Abfrage, wo ich Fehler mache ----- ERSTELLEN TRIGGER blog_after_insert NACH EINFÜGEN - hier ON Blog - und hier FÜR JEDE ROW BEGIN \t \t \t IF NEW.deleted DANN \t \t \t SET @ change = 'DELETE'; \t \t ELSE \t \t \t SET @ changeltype = 'NEU'; \t \t ENDE IF; \t \t INSERT INTO-Prüfung (blog_id, changetype) VALUES (NEW.id, @ changetype); –

+0

Ich habe Leerzeichen in Sonderzeichen @ geschrieben, weil Stack-Überlauf es als Benutzer betrachten .. –