【发布时间】:2018-12-27 05:13:08
【问题描述】:
我正在收集由机器生成的数据。目前我使用软件 OPC Router 通过 OPCUA 将机器数据传输到由 phpMyAdmin 管理的 MySQL 数据库中。为了提高性能并减少使用的存储空间,我想以某种方式对数据库进行建模:
现在我问自己:
如果机器正在发送数据(例如机器名称“5264”),数据库是否可以自动将“机器”表中的相应FK“机器ID”作为整数输入“机器1”而不是输入机器名称“5264”?
我已经尝试先将数据写入额外的表中,然后在插入后插入触发器。然后,此触发器应针对具有匹配 ID 而不是全名的相应表中的每一列执行插入命令。在这里我失败了,因为即使我使用了 BEGIN 和 END,我也无法在一个触发器中执行多个插入命令。
我用于触发器的代码如下所示:
BEGIN
INSERT INTO products(Name)
SELECT t1.Product_Name
FROM transfer_data t1
WHERE NOT EXISTS(SELECT products.Name
FROM products t2
WHERE t2.Name = t1.Product_Name)
INSERT INTO operators
(operators.First_Name, operators.Last_Name)
SELECT t1.Operator_First_Name, t1.Operator_Last_Name
FROM transfer_data t1
WHERE NOT EXISTS(SELECT operators.First_Name, operators.Last_Name
FROM operators t2
WHERE t2.First_Name = t1.Operator_First_Name
AND t2.Last_Name = t1.Operator_Last_Name)
END;
期待听到您对我的计划的意见,并希望得到一些帮助。
【问题讨论】:
-
一个触发器可以有任意数量的插入,只要它们不是触发触发器的表。您可以设置新。插入前触发器中的值。您可能希望发布您的触发代码。
-
@P.Salmon 我添加了用于触发器的代码。也许你可以解释一下我必须改变它的工作原理。或者,也许您有一个更好的解决方案,可以在没有帮助表的情况下以我喜欢的方式插入数据(这里称为“transfer_data”)
-
每条语句都需要终止,如果您的存储程序中有超过 1 条语句而不需要设置分隔符,请查看dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html
-
我希望看到对 OLD 的引用。或新的。触发请求审查中的值dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
标签: mysql sql data-modeling opc-ua