有没有办法在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)。不知道是什么问题?
更新:
任何人都可以帮我摆脱它。
由于
答案 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