【发布时间】:2019-11-15 19:35:08
【问题描述】:
tb_sites_21
我正在创建一个触发器
CREATE DEFINER=`root`@`localhost`
TRIGGER `color_changed`
AFTER INSERT ON `tb_tickets`
FOR EACH ROW UPDATE tb_sites_21
SET color_status = NEW.status
WHERE site_id = NEW.site_id;
它工作得很好,我只需要 tb_sites_21,我希望从创建新条目的 tb_tickets 的 program_id 中挑选这个 21。
类似这样的:
CREATE DEFINER=`root`@`localhost`
TRIGGER `color_changed`
AFTER INSERT ON `tb_tickets`
FOR EACH ROW UPDATE tb_sites_NEW.program_id
SET color_status = NEW.status
WHERE site_id = NEW.site_id;
或
CREATE DEFINER=root@localhost
TRIGGER color_changed AFTER INSERT ON tb_tickets FOR EACH ROW
SET @table_name := (SELECT CONCAT("tb_sites_" , program_id)
FROM tb_tickets
WHERE ticket_id = NEW.ticket_id);
UPDATE table_name set
color_status = NEW.status WHERE site_id = NEW.site_id
我如何做到这一点?
【问题讨论】:
-
在 mysql 中你不能,而且 mysql 不允许触发器调用动态 sql。如果你有一个已知的表列表,你可以在更新之前对每个表进行测试。
-
你能解释一下我们如何在这里使用变量吗? @P.鲑鱼
-
你们哪一点不清楚?
-
如果你有一个已知的表列表,你可以在更新之前测试每个表如何实现?@P.Salmon
-
这看起来是个糟糕的设计。为什么不只使用一个表
db_sites和一列program_id?