使用php在多个Mysql数据库表上触发
如果我在db1中有一个表t1,在db2中有一个表t2。现在,对于db1的t1表上的任何操作,我希望在db2的t2上执行相同的操作 考虑一个场景……如果我在t1中插入相同的记录,那么应该在t2中添加相同的记录。db1和db2都位于同一个数据库中使用php在多个Mysql数据库表上触发,mysql,triggers,Mysql,Triggers,如果我在db1中有一个表t1,在db2中有一个表t2。现在,对于db1的t1表上的任何操作,我希望在db2的t2上执行相同的操作 考虑一个场景……如果我在t1中插入相同的记录,那么应该在t2中添加相同的记录。db1和db2都位于同一个数据库中 有谁能告诉我应该执行哪些具体步骤来实现此场景……或者如何在触发触发器之前打开两个数据库连接?您可以在一个表上编写插入、更新和删除触发器,以反映另一个表上的数据 手册 这也是一种根据应用于相关数据库的更改来更新同一服务器的不同数据库的数据的方法 USE db
有谁能告诉我应该执行哪些具体步骤来实现此场景……或者如何在触发触发器之前打开两个数据库连接?您可以在一个表上编写
插入、更新和删除触发器,以反映另一个表上的数据
手册
这也是一种根据应用于相关数据库的更改来更新同一服务器的不同数据库的数据的方法
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 ;
看,非常感谢…工作正常,但如果我想为多台服务器设置此选项,是否可行?不客气!:)是,可以跨多个服务器同步表数据,为此,您需要在这两台服务器之间设置复制,并将该表添加到复制或其他简单选项中,即创建一个指向其他服务器的联合
表,并在上面的相同触发器中替换它的名称。另外,不要忘了接受最佳答案。见:
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 ;