mysql - mysql 在使用 join 查询后触发
问题描述
我想创建一个触发器,当状态更改为“库存”时设置新的 org_id。
我有 2 个表:具有属性 org_id 的功能性和具有状态的物理设备。调用触发器的更新如下:
UPDATE functionalci f
JOIN physicaldevice d
ON f.id = d.id
SET d.status = 'stock', f.name ="XXX"
WHERE d.id = 2
当我尝试像这样的触发器时:
CREATE TRIGGER trig1
AFTER UPDATE ON physicaldevice
FOR EACH ROW
BEGIN
UPDATE functionalci SET org_id=2 WHERE functionalci.id = OLD.id;
END;
我有这个错误:mysql_errno = 1442, mysql_error = Can't update table 'functionalci' in stored function/trigger 因为它已被调用此存储函数/触发器的语句使用
有什么方法可以在不更改调用它的 UPDATE 的情况下执行触发器?
解决方案
最后我会创建一些mysql事件来解决这个问题。就像是:
CREATE EVENT ev
ON SCHEDULE EVERY 1 MINUTE
DO
UPDATE functionalci f
JOIN physicaldevice d
ON f.id = d.id
SET f.org_id = 2
WHERE f.org_id <> 2 AND d.status LIKE "stock"
它与触发器不同,但它对我有用。
推荐阅读
- java - 为什么 GraalVM 原生镜像编译器不能在没有任何附加信息的情况下构建镜像?
- arrays - 在打字稿中将数组转换为json
- docker - 如何在 docker 容器内建立 ssh 端口转发
- reactjs - 处理更改在 React Select 中不起作用
- swift - 如何使用 swift 使用调查研究工具包从 json 字符串中读取问题?
- html - 在 Word HTML (Outlook) 中将图像与文本垂直对齐
- ruby-on-rails - ActiveStorage Blobs 表,可以忽略列吗?
- android - 如何格式化 kotlinx-datetime LocalDateTime?
- matlab - 如何解决错误“无法从 optim.problemdef.OptimizationConstraint 转换为逻辑!” 在 MATLAB 中
- electron - 我通过 mac 在电子上创建菜单,但是如何隐藏默认菜单“电子”?