是否可以创建一个触发器,该触发器在将记录插入一个数据库但最终插入另一个数据库时执行?

Posted

技术标签:

【中文标题】是否可以创建一个触发器,该触发器在将记录插入一个数据库但最终插入另一个数据库时执行?【英文标题】:Is it possible to create a trigger that executes when a record is inserted in one database but will ultimately insert into a different db? 【发布时间】:2021-10-04 22:24:30 【问题描述】:

使用 mysql。我在我的 web 应用程序中有两个正在使用的数据库。一个称为 AUTH,另一个是 Lab3。我想要做的是当一条记录被插入到“Auth”中时,同一条记录将被插入到“Lab3”中。

这两个数据库都在 MySql 中。

我的另一个解决方案是从我的 webapp 中创建两个插入语句,它们将插入到两个数据库中。

让我知道你的想法。

谢谢

【问题讨论】:

【参考方案1】:

当然。只需在INSERT 中提供数据库前缀:

CREATE TRIGGER trig_test2 AFTER INSERT ON test2
FOR EACH ROW
INSERT INTO test2.test2 (copy) VALUES (NEW.copy+1000)
;

设置:

USE test;

CREATE DATABASE IF NOT EXISTS test2;

DROP TABLE IF EXISTS test2.test2;
CREATE TABLE test2.test2 ( id int primary key auto_increment, copy int );

DROP TABLE IF EXISTS test2;  -- current database "test"
CREATE TABLE test2 ( id int primary key auto_increment, copy int );

DROP TRIGGER IF EXISTS trig_test2;

INSERT INTO test2 (copy) VALUES (100);

CREATE TRIGGER trig_test2 AFTER INSERT ON test2
FOR EACH ROW
INSERT INTO test2.test2 (copy) VALUES (NEW.copy+1000)
;

INSERT INTO test2 (copy) VALUES (101);
INSERT INTO test2 (copy) VALUES (102);
INSERT INTO test2 (copy) VALUES (103);

SELECT * FROM test2;

SELECT * FROM test2.test2;

结果:

--------------
SELECT * FROM test2
--------------

+----+------+
| id | copy |
+----+------+
|  1 |  100 |   <-- Inserted before the trigger was created.
|  2 |  101 |
|  3 |  102 |
|  4 |  103 |
+----+------+
4 rows in set

--------------
SELECT * FROM test2.test2
--------------

+----+------+
| id | copy |
+----+------+
|  1 | 1101 |
|  2 | 1102 |
|  3 | 1103 |
+----+------+
3 rows in set

【讨论】:

在多数据库环境中,为每个对象指定数据库别名是安全的。 IE。 CREATE TRIGGER trig_test2 AFTER INSERT ON database1.test2.

以上是关于是否可以创建一个触发器,该触发器在将记录插入一个数据库但最终插入另一个数据库时执行?的主要内容,如果未能解决你的问题,请参考以下文章

创建 Oracle SQL 触发器错误

AFTER DELETE 触发器触发但不将记录插入审计表

PLSQL 触发器在插入后更新记录

Oracle-触发器和程序包

如何在 SQL Server 2008 上创建插入更新触发器

创建一个名为stu_insert的触发器,当向学生表student中插入记录时,自动更新班级表class中的学生人数numbe