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

时间:2019-10-25 14:03:18

标签: mysql database-trigger

我有一个大表,其中accountID,deviceID,timestamp作为主键,并且有许多具有不同数据类型的字段。 该表非常活跃,通过从互联网接收数据的JAVA服务器每秒增加50至80行。

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

我是MySQL触发器的新手。扳机可以自行射击吗? 我不需要触发本身,但由于克隆的行将被添加到同一张表中,所以可能会发生这种情况。

1 个答案:

答案 0 :(得分:0)

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

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

类似这样:

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 ;

这假定表中主键列之后还有两个其他列。您可以根据自己的表结构进行调整。