如何在新行上创建触发器 mysql?

How to create a trigger mysql on new row?

我有一个很大的 table,其中 accountID、deviceID、时间戳作为主键和许多具有不同数据类型的字段。 table 非常活跃,从 Internet 接收数据的 JAVA 服务器每秒添加 50 到 80 行新数据。

现在我需要在插入具有特定 accountID 和 deviceID 的新行时克隆一些新行,并将克隆上的 accountID 字段更改为一个新字段。

我是 MySQL 触发器的新手。扳机可以自己射击吗? 我不需要触发本身,但由于克隆的行将被添加到相同的 table 也许它会发生,我想。

您不能在触发器内部执行此操作,因为触发器无法 运行 查询触发它的 table。

一个解决方案是创建一个存储过程,您的应用程序在需要插入数据时将调用该存储过程。然后该过程将插入两条记录。

所以像这样:

DELIMITER $$

CREATE PROCEDURE my_insert_proc(
    IN p_accountID INT, 
    IN p_deviceID INT, 
    IN p_timestamp DATETIME,
    IN p_col1 VARCHAR(20),
    IN p_col2 VARCHAR(50)
)
BEGIN
    DECLARE p_accountID_new INT;

    -- "regular" insert
    INSERT INTO mytable(accountID, deviceID, timestamp, col1, col2) 
        VALUES(p_accountID, p_deviceID, p_timestamp, p_col1, p_col2);

    SET p_accountID_new = ... -- whatever you need
    -- "clone" insert
    INSERT INTO mytable(accountID, deviceID, timestamp, col1, col2) 
        VALUES(p_accountID_new, p_deviceID, p_timestamp, p_col1, p_col2);
END
$$

DELIMITER ;

这假定 table 中主键列之后有两个附加列。您可以根据您的 table 结构调整它。