关于mySQL的问题。
我有一个包含下列列的表格:
BasePrice, Discount, NetPrice
现在假设净价的计算如下:
NetPrice = BasePrice - Discount
现在,我不介意将BasePrice
和Discount
值单独输入到我自己的列中,手动使用phpMyadmin(即直接后端更新)。由于NetPrice
值涉及如上所示的计算,我不想更新表中每一行的列值,但更希望数据库自动更新它(not that I am weak at math :)
)。
有没有让数据库自动更新NetPrice
列值?我知道我可以使用php来获取其他两个列值,计算然后再次使用php代码更新NetPrice
值,但是更喜欢db自己做它而没有任何php /服务器端脚本。< / p>
我使用mySQL和phpMyadmin作为开发。
感谢。
答案 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列,BasePrice
和Discount
列必须出现在计算NetPrice
的表达式之前的插入中。 (分配给每个列的值在语句中稍后可用,在列分配值之后。)
如果您总是希望保证NetPrice保持“同步”(如果BasePrice或折扣被修改),那么BEFORE UPDATE
触发器将为您执行此操作,因此BEFORE INSERT
和BEFORE UPDATE
的组合{{1}}触发器是合适的。 (见马可答案。)