如何创建触发器以将数据插入另一台服务器上的数据库

时间:2014-10-22 08:36:24

标签: mysql sql

我在不同的主机上有2个mysql数据库,在将数据插入到另一个数据库之后需要触发器。我是mysql的新手,在sql server中我可以创建链接服务器并执行它。但是如何在mysql中做到? 两个数据库都有类似的表

CREATE TABLE `tsttbl` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` smallint(6) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

1 个答案:

答案 0 :(得分:7)

为了能够继续执行此操作,您必须首先确保两台服务器具有相同的配置。为了完成您想要做的事情,可以在两个服务器上结合触发器使用FEDERATED storage engine,以允许每个服务器更新其他服务器的数据库。

您需要创建与其他服务器上的用户表联合的本地表。所以,如果一条记录已经存在于另一台服务器上,但不存在于此处,我们希望其他服务器上的插入会抛出一个错误,阻止我们在这里创建记录...而不是在这里创建一条记录。一个有冲突的ID;

CREATE TABLE remote_user (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` smallint(6) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
CONNECTION='mysql://username:pass@the_other_host:port/schema/user';

然后你可以创建你的触发器;

DELIMITER $$

CREATE TRIGGER user_bi BEFORE INSERT ON user FOR EACH ROW
BEGIN
  INSERT INTO remote_user (ID,name, age) VALUES (NEW.ID,NEW.name, NEW.Age);
END $$

CREATE TRIGGER user_bu BEFORE UPDATE ON user FOR EACH ROW
BEGIN
  UPDATE remote_user 
     SET ID= NEW.ID,
         name= NEW.name
         age = NEW.Age
   WHERE ID = OLD.ID;
END $$

CREATE TRIGGER user_bd BEFORE DELETE ON user FOR EACH ROW
BEGIN
   DELETE FROM remote_user
   WHERE ID= OLD.ID;
END $$

DELIMITER ;