2015-02-01 29 views
6

Tetik oluşturmak istiyorum ve bu sorguyu yazdım ama bu çalışmaz. Benim sorgusql sözdizimi hatası tetikleniyor

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); 

kontrol edin ben bu hatayı

#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

Sadece teklifleri kaldırın. – SMA

+0

Sadece dize ve tarih sabitleri için tek tırnak kullanın. –

cevap

12

bu sorguyu çalıştırın

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

Tek tırnak alıyorum (') dize hazır belirtmek - nesne adlarını, hiç tetikleyiciler ve tablolar tırnak ileri kullanmalısınız veya hiçbir tırnak gibi:

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

Bana önerdiğin değişiklikleri yaptım ama yine de hata alıyorum .. lütfen hata yaptığım sorguya bakın ----- CREATE TRIGGER blog_after_insert AFTER INSERT - burada ON blogda - ve burada HER ROW BEGIN \t \t \t NEW.deleted SONRA \t \t \t SET @ changetype = 'DELETE'; \t \t ELSE \t \t SET @ changetype = 'NEW'; \t \t END IF; \t \t INSERT INTO denetimi (blog_id, changetype) VALUES (NEW.id, @ changetype); –

+0

Özel karakterlere boşluk koydum @ çünkü yığın taşması bunu kullanıcı olarak kabul ediyor .. –