2013-07-10 50 views
1

我想从php页面获取一些值并在mysql数据库中执行触发器。这是如下:使用触发器在表上执行插入或更新

DELIMITER $$ 

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`MysqlTrigger`$$ 

CREATE 
    /*!50017 DEFINER = 'root'@'localhost' */ 
    TRIGGER `MysqlTrigger` AFTER INSERT OR UPDATE ON `table2` 
    FOR EACH ROW BEGIN 
    IF(NEW .flag=0) THEN 
    INSERT INTO temp(sent,pcount,ncount) VALUES (NEW.sent,NEW.pcount,NEW.ncount); 
    ELSE 
     UPDATE temp SET pcount=NEW.pcount AND ncount=NEW.ncount WHERE id = NEW.id; 
    END IF; 
    END; 
$$ 

DELIMITER ; 

其中给出错误:

error Code : 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 'or update ON `table2` 
    FOR EACH ROW BEGIN 
    if(NEW .flag=0) then 
    INSERT INTO' at line 3 

我试图改变= =有:但错误依然存在。任何想法都有可能吗?

回答

0

我算了。语法有问题。这里是一个在不同的表和更新插页上同一个表同一时刻进行更新插入,但正确的使用,如果其他人:

DELIMITER $$ 

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`MysqlTrigger2`$$ 

CREATE 
    /*!50017 DEFINER = 'root'@'localhost' */ 
    TRIGGER `MysqlTrigger2` AFTER INSERT ON `table2` 
    FOR EACH ROW BEGIN 
    IF 'flag'=1 THEN 
     UPDATE record SET sent=NEW.sent WHERE id=NEW.id; 
    ELSE 
     INSERT INTO record VALUES (id,NEW.sent); 
     INSERT INTO temp VALUES() 
    END IF; 
    END; 
$$ 

DELIMITER ; 
1

您无法同时为更新插入定义触发器。你必须定义2个触发器:

CREATE TRIGGER `Mysql_insert_Trigger` AFTER INSERT ON `table2` ... 
CREATE TRIGGER `Mysql_update_Trigger` AFTER UPDATE ON `table2` ... 
+0

我能做到这一点的更新和插入都是用的if else,这样他们就不会被执行在同一时刻。 – user123