2010-07-02 99 views
9

我有一个简单的问题。香港专业教育学院有一个触发值插入到另一个数据库INSERT ON DUPLICATE KEY上的触发器

因此,举例来说,如果有两个值,并触发在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仍然没有任何结果。任何想法感谢事先

+0

伟大的问题,并成为老年人。那么,如果你想在触发器内同时获得OLD.val和NEW.val呢? – 2013-02-28 19:38:57

回答

10

触发对查询如

INSERT INTO table (x, y, z) VALUES('x', 'y', 'z') ON DUPLICATE KEY UPDATE x=VALUES(x); 

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

+2

我知道这是旧的,但你有证据证明这是真的吗? – jcoffland 2015-05-01 22:53:23

2

也许来代替

NEW.val!= NULL 

你需要

NEW.val IS NOT NULL 

值永远不会等于空,这是从来没有不等于空。

+0

对不起,对于迟到的回复,我会尝试这个并发布更新 – 2010-07-02 19:32:27

+0

不会插入表B – 2010-07-04 02:09:58

相关问题