想在Mysql中为两个不同的数据库编写触发器

时间:2012-09-21 08:23:01

标签: mysql

有没有办法在Mysql中的两个不同数据库上创建触发器?我的要求是: -

database: test1 -> table: tmp1
database: test2 -> table: tmp2

现在我必须在test1上使用触发器插入操作发生在tmp1上,一个值必须插入到test2数据库的tmp2中。还有一节经文。 即在test2数据库的tmp2表上再触发一次,如果插入到tmp2然后插入到test1数据库的tmp1表中。

我曾尝试在两者上写入触发器,但我认为它将进入循环以插入彼此的表。

DELIMITER $$
CREATE TRIGGER trigger_ad_t1 AFTER insert ON `test1`.tmp1 
FOR EACH ROW
Begin
  INSERT INTO `test2`.tmp2 VALUES (NEW.employeeNumber,New.fname,New.lname)
END$$
DELIMITER ;

在插入tmp2表后插入到tmp1中的相同类型的触发器。

我在我的本地电脑上测试了这个触发器的另一件事,它有mysql 5.1.63但是当我在我的测试服务器上尝试这个触发器时,它有mysql 5.0.45然后它给了我语法错误(1064)。不知道是什么问题?

更新:

With delimeter without delimeter

任何人都可以帮我摆脱它。

由于

1 个答案:

答案 0 :(得分:1)

在触发器中使用完全限定的表名。

db1.test1.*d2.test2.*

P.S。再看一遍你的SQL后,我意识到你已经已经做了上述事情。

编辑:注释字段是限制发布代码,所以这里是你如何阻止无限插入循环(假设employeeNumber是唯一键):

编辑代码:

IF NOT EXISTS(SELECT employeeNumber FROM otherDB.otherTable WHERE employeeNumber = NEW.employeeNumber) THEN
INSERT INTO otherDB.otherTable VALUES (NEW.employeeNumber,New.fname,New.lname)
END IF;

最初提供的代码需要更正: ... EXISTS(SELECT * FROM otherDB.otherTable ...)替换为 ... EXISTS(SELECT employeeNumber FROM otherDB.otherTable ...)
原因是第一个查询将始终返回true,因为内部查询SELECT * FROM ...始终返回包含结果数量的一条记录=>
EXISTS(SELECT * FROM ...)始终为true