Mysql中的跨数据库触发器

时间:2012-09-14 09:28:54

标签: mysql sql triggers

是否可以在MySQL中应用触发器进行跨数据库访问如果是这样,请举一个例子。如果在database1中插入/更新/删除任何新数据,我的目的是在database2中插入/更新/删除数据。我正在使用MySQL 5.1

2 个答案:

答案 0 :(得分:3)

是的,你可以。您可以制作一个程序并在触发器中调用它。程序示例:

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;

答案 1 :(得分:0)

我知道这是一个古老的话题,但我必须自己实现跨数据库触发器,我想在此处展示解决方案,因为其他读者可能会从中受益。

在触发器的代码中,可以使用其全名database_name.table_name来引用目标数据库。

假设您在同一台服务器上有两个数据库:database1database2。在两个数据库的每个数据库中,您都有下表:

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上测试了上述内容。