gpt4 book ai didi

mysql - 如何设置触发器以从另一个模式插入另一个表?

转载 作者:行者123 更新时间:2023-11-29 06:31:17 25 4
gpt4 key购买 nike

如何设置触发器以从另一个架构插入另一个表?

<小时/>

简要说明

考虑架构“S”和架构“1”到“n”。考虑模式“S”具有表 Users 和表 Company。表 users 与表 Company 具有 1:1 的关系。每个用户都在一个公司中。表 Company 具有“schema”列 (varchar(255))

架构“S”定义了用户表和公司表。每个其他模式都应该有表 Users 的副本。

但是,表 Users 仅在架构 S 上进行修改。

每次修改架构“S”中的表 Users 时,如果且仅当表“Company”中的列“schema”==“n”时,我想将更改复制到架构“n”。

此限制使该问题与其他问题不同!

啊是的:

  • 所有架构均保留在同一数据库中。

Illustration of the issue

示例

考虑表 Users 具有以下列:

  • Id - 整数

  • 用户名 - Varchar(255)

  • 出生日期 - 日期

  • idCompany - FK int

考虑公司表具有以下列:

  • Id - 整数
  • 架构 - Varchar(255)

当我在架构“S”上的用户表上进行插入时,我希望发生以下情况:

    if User.Company.schema == "schema A"{

replicate to schema "A";

} else if User.Company.schema == "schema N"{
replicate to schema "N";
}
....

我对如何在下面的代码中执行该逻辑感到困惑:

CREATE DEFINER=`root`@`localhost` TRIGGER `user_AFTER_INSERT` AFTER INSERT ON `user` FOR EACH ROW BEGIN

END

最佳答案

您将需要使用动态 SQL 构建对另一个数据库的 INSERT 查询:

CREATE DEFINER=`root`@`localhost` TRIGGER `user_AFTER_INSERT` AFTER INSERT ON `user` 
FOR EACH ROW
BEGIN
SELECT schema INTO @schema FROM Company WHERE Id = NEW.idCompany;
SET @sql = CONCAT('INSERT INTO `', @schema, '`.`Users` (id, username, dateBirth, idCompany) VALUES(?, ?, ?, ?)';
PREPARE stmt FROM @sql;
SET @id = NEW.id;
SET @username = NEW.username;
SET @dateBirth = NEW.dateBirth;
SET @idCompany = NEW.idCompany;
EXECUTE stmt USING @id, @username, @dateBirth, @idCompany;
DEALLOCATE PREPARE stmt;
END

关于mysql - 如何设置触发器以从另一个模式插入另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56113465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com