3

有什么方法可以在 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)。不知道是什么问题?

更新:

带分隔符 没有分隔符

谁能帮我摆脱它。

谢谢

4

1 回答 1

1

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

db1.test1.*d2.test2.*

PS 在再次查看您的 SQL 之后,我意识到您已经在执行上述操作。

编辑:评论字段是对邮政编码的限制,所以这是防止无限插入循环的方法(假设员工编号是唯一键):

编辑代码:

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

于 2012-09-21T08:26:49.430 回答