如何在新行上创建触发器 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 结构调整它。
我有一个很大的 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 结构调整它。