【问题标题】:History field in MySQL databaseMySQL数据库中的历史字段
【发布时间】:2013-08-07 17:47:43
【问题描述】:

尝试在表中创建一个字段,该字段将获取另一个字段的旧值。我的表与此非常相似:

 ------------ -------------------- ------------------------ 
| id int(10) | price decimal(5,2) | price_old decimal(5,2) | 
 ----------------------------------------------------------

我想要得到的是price 字段的值,以复制到当前记录的price_old 字段ON UPDATE 中。

只用mysql就可以做到吗?

PS:该单元格中包含的数据并不重要。用途是存储项目的先前价格和之后的价格,以便能够显示它是如何变化的。我只需要最后一个值,而不需要表条目的完整历史记录。 (如果这很重要,我的 MySQL 服务器是 5.0)

【问题讨论】:

  • 对不起,我会编辑。我的意思是price_old 字段中的price 字段

标签: mysql mysql-5.0


【解决方案1】:

是的,您可以使用BEFORE UPDATE 触发器 (documentation)。

我认为这种语法是正确的,但有一段时间没有使用 MySQL,所以你可能不得不玩弄它。如果有错误并且您可以正常使用,请告诉我,以便我进行编辑。

DELIMITER $$
CREATE TRIGGER `price_trigger`
BEFORE UPDATE ON `products`
FOR EACH ROW
BEGIN
    IF NEW.price != OLD.price
        SET price_old = OLD.price;
    END IF;
END$$
DELIMITER ;

【讨论】:

    【解决方案2】:

    在更新规则上使用triggers。将 price 的值设置为 price_old

    CREATE TRIGGER `update_price_old`  
        BEFORE UPDATE ON `table_name` FOR EACH ROW  
        BEGIN 
        UPDATE `table_name` SET price_old = OLD.price where OLD.id = id;
        END 
    

    【讨论】:

    • 我对@DwB 的回答发表评论 :)
    • 现在检查。更新了样本。 (注意:未测试)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多