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

我试图用 = 更改 =:但错误仍然存​​在。知道问题是什么吗?

4

2 回答 2

1

You can't define a trigger for update and insert at the same time. You have to define 2 triggers:

CREATE TRIGGER `Mysql_insert_Trigger` AFTER INSERT ON `table2` ...
CREATE TRIGGER `Mysql_update_Trigger` AFTER UPDATE ON `table2` ...
于 2013-07-10T19:07:04.317 回答
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 ;
于 2013-07-11T05:36:41.923 回答