【发布时间】:2012-08-28 00:54:50
【问题描述】:
如果我有一个表 t1 在 db1 和 t2 在 db2 。现在对 db1 的 t1 表上的任何操作,我希望在 db2 的 t2 上执行相同的操作。
考虑一个场景...如果我在 t1 中插入相同的记录,则应该在 t2 中添加相同的记录。 db1 和 db2 都位于同一个数据库中。
谁能告诉我应该执行哪些具体步骤来完成这个场景...或者如何在触发触发器之前打开两个数据库连接?
【问题讨论】:
如果我有一个表 t1 在 db1 和 t2 在 db2 。现在对 db1 的 t1 表上的任何操作,我希望在 db2 的 t2 上执行相同的操作。
考虑一个场景...如果我在 t1 中插入相同的记录,则应该在 t2 中添加相同的记录。 db1 和 db2 都位于同一个数据库中。
谁能告诉我应该执行哪些具体步骤来完成这个场景...或者如何在触发触发器之前打开两个数据库连接?
【问题讨论】:
您可以在一张表上编写INSERT, UPDATE & DELETE 触发器以反映另一张表上的数据。
手册here
CREATE TRIGGER insert_t1 BEFORE INSERT ON db1.t1
delimiter //
FOR EACH ROW
BEGIN
INSERT INTO db2.t2 VALUES (...);
END;//
delimiter ;
【讨论】:
FEDERATED 表并且只是在上面的同一个触发器中替换它的名称。
这也是我们可以根据应用在相关数据库上的更改来更新同一服务器的不同数据库的数据的一种方式
USE db1;
DROP TRIGGER IF EXISTS t1;
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `t1` AFTER INSERT
ON `db1`.`dt1`
FOR EACH ROW BEGIN
INSERT INTO `db2`.`dt2`
(ID,Fname)
VALUES
(NEW.ID,NEW.Fname);
END$$
DELIMITER ;
////Update
USE db1;
DROP TRIGGER IF EXISTS t4;
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `t4` AFTER UPDATE
ON `db1`.`dt1`
FOR EACH ROW BEGIN
UPDATE `db2`.`dt2`
SET `dt2`.`Fname`=NEW.Fname WHERE `dt2`.`ID`=NEW.ID;
END$$
DELIMITER ;
////Delete
USE db1;
DROP TRIGGER IF EXISTS t2;
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `t2` AFTER DELETE
ON `db1`.`dt1`
FOR EACH ROW BEGIN
DELETE FROM `db2`.`dt2` WHERE `dt2`.`ID`=OLD.ID;
END$$
DELIMITER ;
【讨论】: