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

标签 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

最佳答案

为了能够继续进行此操作,您必须首先确保两台服务器具有相同的配置。为了完成你想做的事情,可以使用 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 ;

关于mysql - 如何创建触发器以将数据插入另一台服务器上的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26503342/

相关文章:

mysql - 在两个日期范围内获取结果

sql - MySQL:如何以编程方式确定外键关系?

sql - 插入后触发更新表列?

sql - postgreSQL TO_NUMBER 函数因附加 WHERE 限制而失败?

sql - 选择每月第一天的值

sql - 如何获取sql server中的最新行

python - 根据表中的现有属性在 Python 中填充 SQL 表

mysql - 如何在单个查询中统计与基表结果匹配的多个表的记录?

python - 在 Python 中使用按制表符分割会向文本中添加一个字符,这会在 MySQL 中引发错误

javascript - 在钛的本地数据库中插入特殊字符