2

Is it possible to apply trigger for cross database access in MySQL If so please give one example. My purpose is to insert/update/delete data in database2 if there is any new data inserted/updated/deleted in database1. I am using MySQL 5.1

4

2 回答 2

4

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

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;
于 2012-09-14T09:38:17.210 回答
4

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

在触发器的代码中,可以使用其全名来引用目标数据库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 上测试了上述内容。

于 2018-03-23T14:35:14.117 回答