我是这个TRIGGER的新手,它让我非常好。
目的是在每次价格发生价格变动时填写价格历史表。
到目前为止,我的尝试是每次更新一个价格或根本不工作时都会更改所有价格。
我基本上没有得到这个逻辑,因此我可以将其限制为更新的一个价格,而不是所有更新。
以下是一段伪代码。
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 ;
表格价格(摘要)
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
答案 0 :(得分:1)
请勿在触发器内执行SELECT
,因为这将使用表中的所有行。您可以直接从更改的行中获取列。您还可以使用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 ;
答案 1 :(得分:0)
价格表应该有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