根据外键链接的表插入数据

bfhwhh0e  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(313)

我正在收集机器生成的数据。目前我使用软件opc路由器将机器数据通过opcua传输到phpmyadmin管理的mysql数据库中。为了提高性能并减少所用的存储空间,我考虑以某种方式对db进行建模:

现在我在问自己:
如果机器正在发送数据(例如机器名“5264”),数据库是否可以自动将“machines”表中相应的fk“machine\u id”作为整数输入“machine1”,而不是输入机器名“5264”?
我已经尝试过先将数据写入一个额外的表中,然后在那里插入触发器。然后,这个触发器应该为每个列执行一个insert命令,并使用匹配的ID(而不是全名)插入相应的表中。在这里我失败了,因为我不能在一个触发器中执行多个insert命令,即使我使用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;

期待听到你对我的计划的意见,并希望得到一些帮助。

7uhlpewt

7uhlpewt1#

非常感谢@p.salmon!我现在使用以下代码使其工作:

Delimiter //

Create trigger this_one after insert on transfer_data
For each row

    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
    //

delimiter ;

相关问题