mysql触发更新以填充另一个表

时间:2015-05-26 18:18:37

标签: mysql triggers

我是这个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

2 个答案:

答案 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