关于mySQL的问题.
我有一个表格,如下所示:
BasePrice, Discount, NetPrice
Run Code Online (Sandbox Code Playgroud)
现在假设净价的计算如下:
NetPrice = BasePrice - Discount
Run Code Online (Sandbox Code Playgroud)
现在,我不介意在我自己的列中输入BasePrice和Discount值,手动使用phpMyadmin(即直接后端更新).由于该NetPrice值涉及如上所示的计算,因此我不想更新表中每行的列值,而是希望数据库自动为我更新它(not that I am weak at math :)).
有没有让数据库NetPrice自动更新列值?我知道我可以使用php获取其他两个列值,计算然后NetPrice再次使用PHP代码更新值,但更喜欢db自己做它而没有任何php /服务器端脚本.
我使用mySQL和phpMyadmin作为dev.
谢谢.
您可以使用单个查询来更新所有表:
UPDATE your_table
SET NetPrice = BasePrice - Discount
Run Code Online (Sandbox Code Playgroud)
或者您可以在添加行时随时使用触发器来更改该列.
像这样的东西:
CREATE TRIGGER onInsert BEFORE INSERT ON `your_table`
FOR EACH ROW
BEGIN
SET NEW.NetPrice = NEW.BasePrice - NEW.Discount;
END;
Run Code Online (Sandbox Code Playgroud)
作为 Marco (+1) 答案的替代方案,对于 INSERT,最简单的方法可能是引用先前在语句中分配的列。例如:
INSERT INTO t (BasePrice, Discount, NetPrice) VALUES (17.00, 2.50, BasePrice-Discount);
Run Code Online (Sandbox Code Playgroud)
为了正确计算 NetPrice 列,BasePrice和列必须出现在计算 的表达式之前的Discount插入内容中。(分配给每列的值可在语句中稍后为该列分配值后使用。)NetPrice
如果您始终希望在修改 BasePrice 或 Discount 时保证 NetPrice 保持“同步”,那么触发器将为您执行此操作,因此 a和触发器BEFORE UPDATE的组合将是合适的。(参见Marco的回答。)BEFORE INSERTBEFORE UPDATE
| 归档时间: |
|
| 查看次数: |
20567 次 |
| 最近记录: |