Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何创建触发器以将数据插入另一台服务器上的数据库_Mysql_Sql - Fatal编程技术网

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

Mysql 如何创建触发器以将数据插入另一台服务器上的数据库,mysql,sql,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 K

我在不同的主机上有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

要继续此操作,必须首先确保两台服务器具有相同的配置。为了完成您想要做的事情,可以在两台服务器上使用联邦数据库,并结合使用触发器,以允许每台服务器更新另一台服务器的数据库

您需要创建与另一台服务器上的用户表联合的本地表。因此,如果另一台服务器上已经存在一条记录,但不在这里,我们希望另一台服务器上的insert抛出一个错误,阻止我们在这里创建记录。。。而不是在这里创建一个带有冲突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 ;

只要用户上运行的触发器能够访问这两个数据库,就可以很容易地做到这一点。这里的触发器很容易创建检查,示例是更新后,您可以将其更改为插入后。感谢回复,我知道如何创建触发器,但我不知道如何从triggerwell连接到另一个数据库表。您需要mysql用户访问这两个数据库,然后在该用户
定义者
上创建触发器以执行该任务。但这只适用于同一台主机。由于您的数据库位于不同的主机中,您可能需要某种应用程序层来使用REST、CURL或SOAP完成这项工作。或者可能是联邦存储引擎我读了另一个关于stackoverflow的问题/答案,那么联邦引擎呢?是的,我更新了我最后的评论,包括关于联邦存储引擎的内容