如何使用同一行中其他列的公式和数据自动更新MYSQL列值?

时间:2011-11-10 08:55:14

标签: mysql phpmyadmin

关于mySQL的问题。

我有一个包含下列列的表格:

BasePrice, Discount, NetPrice

现在假设净价的计算如下:

NetPrice = BasePrice - Discount

现在,我不介意将BasePriceDiscount值单独输入到我自己的列中,手动使用phpMyadmin(即直接后端更新)。由于NetPrice值涉及如上所示的计算,我不想更新表中每一行的列值,但更希望数据库自动更新它(not that I am weak at math :))。

有没有让数据库自动更新NetPrice列值?我知道我可以使用php来获取其他两个列值,计算然后再次使用php代码更新NetPrice值,但是更喜欢db自己做它而没有任何php /服务器端脚本。< / p>

我使用mySQL和phpMyadmin作为开发。

感谢。

2 个答案:

答案 0 :(得分:5)

您可以使用单个查询来更新所有表格:

UPDATE your_table
SET NetPrice = BasePrice - Discount

或者您可以在添加行时随时使用触发器来更改该列 像这样:

CREATE TRIGGER onInsert BEFORE INSERT ON `your_table`
FOR EACH ROW
BEGIN
    SET NEW.NetPrice = NEW.BasePrice - NEW.Discount;
END;

答案 1 :(得分:4)

作为Marco(+1)答案的替代方案,对于INSERT,最简单的方法可能是引用先前在语句中分配的列。例如:

INSERT INTO t (BasePrice, Discount, NetPrice) VALUES (17.00, 2.50, BasePrice-Discount);

要正确计算该NetPrice列,BasePriceDiscount列必须出现在计算NetPrice的表达式之前的插入中。 (分配给每个列的值在语句中稍后可用,列分配值之后。)

如果您总是希望保证NetPrice保持“同步”(如果BasePrice或折扣被修改),那么BEFORE UPDATE触发器将为您执行此操作,因此BEFORE INSERTBEFORE UPDATE的组合{{1}}触发器是合适的。 (见马可答案。)