是否可以创建一个触发器,该触发器在将记录插入一个数据库但最终插入另一个数据库时执行?
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
.以上是关于是否可以创建一个触发器,该触发器在将记录插入一个数据库但最终插入另一个数据库时执行?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2008 上创建插入更新触发器
创建一个名为stu_insert的触发器,当向学生表student中插入记录时,自动更新班级表class中的学生人数numbe