使用php在多个Mysql数据库表上触发联动

4

如果我在db1中有一个表t1,在db2中有一个表t2。现在对于db1的t1表上的任何操作,我希望在db2的t2上执行相同的操作。

考虑这样一种情况...如果我在t1中插入同样的记录,那么t2中也应该添加相同的记录。 db1和db2都位于同一个数据库中。

有人能告诉我应该采取哪些具体步骤来实现这个场景... 或者如何在触发器之前打开两个数据库连接?


请查看http://stackoverflow.com/questions/1832759/creating-trigger-across-different-databases。 - victorsavu3
2个回答

0

您可以在一个表上编写INSERT、UPDATE和DELETE触发器,以反映其他表上的数据。

手动这里

CREATE TRIGGER insert_t1 BEFORE INSERT ON db1.t1
delimiter //
FOR EACH ROW
BEGIN
    INSERT INTO db2.t2 VALUES (...);

END;//
delimiter ;

非常感谢...它运行良好,但如果我想将其设置为多个服务器,是否可能? - Jhanvi
不客气! :) 是的,可以在多个服务器之间同步表数据,因此您需要在这两个服务器之间设置复制并在复制中添加该表,或者其他简单选项是创建一个指向其他服务器的“FEDERATED”表,并将其名称替换为上面相同的触发器。 - Omesh

0

这也是一种我们可以根据相关数据库的更改更新同一服务器上不同数据库数据的方法。

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 ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接