INSERT ON DUPLICATE KEY上的触发器

时间:2010-07-02 01:36:43

标签: mysql triggers

我有一个简单的问题。我有一个触发器将值插入另一个数据库

例如,如果有两个值且触发器正在检查Table A中的值并插入Table B

所以这是代码

-- Trigger DDL Statements
USE `db`;
DELIMITER //

CREATE
DEFINER=CURRENT_USER()
TRIGGER `db`.`AFTER_INSERT_A`
AFTER INSERT ON `db`.`a`
FOR EACH ROW
BEGIN

    IF NEW.val!= NULL
    THEN

        UPDATE b SET dateRemove=CURRENT_TIMESTAMP WHERE val=NEW.val;

        INSERT INTO b (val) VALUES(NEW.val) ON DUPLICATE KEY UPDATE dateRemove=NULL, dateUpdate=CURRENT_TIMESTAMP;

    END IF;
END//

触发器甚至会抛出任何错误。我在B

中没有价值观

我的插入内容

INSERT INTO a (val) VALUES(`test`) ON DUPLICATE KEY UPDATE dateUpdate=CURRENT_TIMESTAMP

有没有人有任何想法。我曾尝试创建两个触发器INSERT而另一个UPDATE,我已将AFTER更改为BEFORE,而我的表b仍未得到任何结果。任何想法提前感谢

2 个答案:

答案 0 :(得分:10)

要在

等查询上运行的触发器
INSERT INTO table (x, y, z) VALUES('x', 'y', 'z') ON DUPLICATE KEY UPDATE x=VALUES(x);

必须始终在BEFORE INSERT触发器上运行。

答案 1 :(得分:2)

也许不是

NEW.val!= NULL

你需要

NEW.val IS NOT NULL

值永远不会等于null,并且永远不等于null。