Mysql中的跨数据库触发器
Posted
技术标签:
【中文标题】Mysql中的跨数据库触发器【英文标题】:Cross database trigger in Mysql 【发布时间】:2012-09-14 09:28:53 【问题描述】:是否可以在 mysql 中为跨数据库访问应用触发器如果可以,请举一个例子。我的目的是如果在 database1 中插入/更新/删除任何新数据,则在 database2 中插入/更新/删除数据。我正在使用 MySQL 5.1
【问题讨论】:
跨数据库(不同的数据库安装)触发器不存在。 (跨模式,在一台服务器上,offcourse 确实存在)。尝试复制或 MySQLDump。 ***.com/questions/4406808/… @mridul4c 你到底要做什么? @Devart 实际上我有一个从我的 CMS 动态填充的数据库,每次插入或更新时,我都需要另一个数据库进行相同的插入或更新,而无需编写代码和使用触发器。 您可以在 dbForge Studio for MySQL 中借助 Date Comparison tool 同步数据库。您可以在命令行模式下运行它。 【参考方案1】:是的,你可以。您可以创建一个程序并在触发器中调用它。程序示例:
DELIMITER //
CREATE PROCEDURE delete(in table VARCHAR(300), in db VARCHAR(300), in id INT)
BEGIN
set @query0 = CONCAT('DELETE FROM ', new_db, '.', tabela, ' WHERE id=',id);
PREPARE select_query0 FROM @query0;
EXECUTE select_query0;
DEALLOCATE PREPARE select_query0;
END; //
DELIMITER ;
然后创建触发器:
CREATE TRIGGER del_trigger BEFORE DELETE ON table
FOR EACH ROW BEGIN
CALL delete(db, table, OLD.id);
END;
【讨论】:
【参考方案2】:我知道这是一个老话题,但我只需要自己实现一个跨数据库触发器,我想在这里展示解决方案,因为其他读者可能会从中受益。
在触发器的代码中,可以使用全名database_name.table_name
引用目标数据库。
假设您在同一台服务器上有两个数据库:database1
和 database2
。在这两个数据库中的每一个中,您都有下表:
CREATE TABLE 'test' (
'id' int(10) DEFAULT NULL,
'name' varchar(100) DEFAULT NULL
)
在 database1
中创建以下 INSERT 触发器:
USE database1;
DELIMITER //
CREATE TRIGGER sync_insert AFTER INSERT ON test
FOR EACH ROW
BEGIN
INSERT INTO database2.test SET id = NEW.id, name=NEW.name;
END; //
DELIMITER ;
为 UPDATE 和 DELETE 定义类似的触发器。
我想说这个解决方案比使用过程更简单直接。
我在 MySQL 5.1.73 和 MariaDB 10.2.13 上测试了上述内容。
【讨论】:
以上是关于Mysql中的跨数据库触发器的主要内容,如果未能解决你的问题,请参考以下文章