是否可以在MySQL中应用触发器进行跨数据库访问如果是这样,请举一个例子。如果在database1中插入/更新/删除任何新数据,我的目的是在database2中插入/更新/删除数据。我正在使用MySQL 5.1
答案 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
来引用目标数据库。
假设您在同一台服务器上有两个数据库: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上测试了上述内容。