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
问问题
5032 次
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
。
假设您在同一台服务器上有两个数据库: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 上测试了上述内容。
于 2018-03-23T14:35:14.117 回答