【问题标题】:Trigger on Multiple Mysql Database tables using php使用 php 触发多个 Mysql 数据库表
【发布时间】:2012-08-28 00:54:50
【问题描述】:

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

考虑一个场景...如果我在 t1 中插入相同的记录,则应该在 t2 中添加相同的记录。 db1 和 db2 都位于同一个数据库中。

谁能告诉我应该执行哪些具体步骤来完成这个场景...或者如何在触发触发器之前打开两个数据库连接?

【问题讨论】:

标签: mysql triggers


【解决方案1】:

您可以在一张表上编写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 表并且只是在上面的同一个触发器中替换它的名称。
  • 也不要忘记接受最佳答案。见:meta.stackexchange.com/questions/5234/…
【解决方案2】:

这也是我们可以根据应用在相关数据库上的更改来更新同一服务器的不同数据库的数据的一种方式

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 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多