Mysql 如何创建触发器以将数据插入另一台服务器上的数据库
我在不同的主机上有2个mysql数据库,希望在将数据插入到一个数据库后触发它插入到另一个数据库。我是mysql的新手,在sql server中我可以创建链接服务器并执行它。但是如何在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
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的问题/答案,那么联邦引擎呢?是的,我更新了我最后的评论,包括关于联邦存储引擎的内容