mysql 触发更新以填充另一个 table
mysql trigger on update to populate another table
我是这个 TRIGGER 的新手,它让我很受打击。
目的是在每次 table 价格发生价格变化时填充价格历史记录 table。
到目前为止,我的尝试是在每次更新一个价格时对所有价格进行更改,或者根本不起作用。
这个逻辑我基本没搞懂,所以只能限制在一个价格更新,而不是全部更新。
下面是一段伪代码。
DELIMITER //
CREATE TRIGGER price_update
AFTER UPDATE
ON prices FOR EACH ROW
BEGIN
INSERT INTO prices_history (version_id,price,data_change)
SELECT version_id, price, time_update FROM prices WHERE????? ;
END //
DELIMITER ;
table 价格(汇总)
version_id smallint(4) primary
price decimal (10,0)
time_update timestamp
table prices_history
price_id int(5) primary
version_id smallint(4)
price decimal (10,0)
data_change datetime
不要在触发器内执行 SELECT
,因为那样会使用 table 中的所有行。您可以直接使用更改行中的列。您也可以使用 OLD.
和 NEW.
来区分 UPDATE 前后的值。
DELIMITER $$
CREATE TRIGGER price_update
BEFORE UPDATE ON prices
FOR EACH ROW
BEGIN
INSERT INTO prices_history SET
price = NEW.price,
version_id = NEW.version_id, // or OLD.version_id
data_change = NEW.time_update;
END$$
DELIMITER ;
价格 table 应该 price_id - 而不是 version_id
然后
select @max_version = max(version_no)+1 from price_history where price_id = @changed_price_id
INSERT INTO prices_history (price_id, version_id,price,data_change)
SELECT price_id_id, @max_version, price, time_update FROM prices WHERE price_id = @changed_price_id
;
我是这个 TRIGGER 的新手,它让我很受打击。
目的是在每次 table 价格发生价格变化时填充价格历史记录 table。
到目前为止,我的尝试是在每次更新一个价格时对所有价格进行更改,或者根本不起作用。
这个逻辑我基本没搞懂,所以只能限制在一个价格更新,而不是全部更新。
下面是一段伪代码。
DELIMITER //
CREATE TRIGGER price_update
AFTER UPDATE
ON prices FOR EACH ROW
BEGIN
INSERT INTO prices_history (version_id,price,data_change)
SELECT version_id, price, time_update FROM prices WHERE????? ;
END //
DELIMITER ;
table 价格(汇总)
version_id smallint(4) primary
price decimal (10,0)
time_update timestamp
table prices_history
price_id int(5) primary
version_id smallint(4)
price decimal (10,0)
data_change datetime
不要在触发器内执行 SELECT
,因为那样会使用 table 中的所有行。您可以直接使用更改行中的列。您也可以使用 OLD.
和 NEW.
来区分 UPDATE 前后的值。
DELIMITER $$
CREATE TRIGGER price_update
BEFORE UPDATE ON prices
FOR EACH ROW
BEGIN
INSERT INTO prices_history SET
price = NEW.price,
version_id = NEW.version_id, // or OLD.version_id
data_change = NEW.time_update;
END$$
DELIMITER ;
价格 table 应该 price_id - 而不是 version_id
然后
select @max_version = max(version_no)+1 from price_history where price_id = @changed_price_id
INSERT INTO prices_history (price_id, version_id,price,data_change)
SELECT price_id_id, @max_version, price, time_update FROM prices WHERE price_id = @changed_price_id
;