MySQL将两列的差异计算为Total列

时间:2013-11-16 02:46:58

标签: mysql sql calculated-columns

Name  |InitialScore  | CurrentScore   | Total
 ----------------------------------------------- 
Bart  | 145          | 95             | -50 
Homer | 230          | 260            |  30 
Lisa  | 111          | 179            |  68

我有一个包含上述值的表格,我试图做的是使用Total列找到初始得分与名为mods的表中当前得分之间的差异。

我尝试了多种变体:

    ALTER TABLE mods
    ADD Total AS tphs + won PERSISTED

但我一直得到“#1064 - 你的SQL语法有错误;”我目前的MySQL是5.1.70。有没有办法完成标记为Total的持久列,那么当我对CurrentScore列进行更改时,它会自动更新总数?

2 个答案:

答案 0 :(得分:0)

您想要使用触发器。触发器是与表关联的命名数据库对象,并在表发生特定事件时激活。此事件可以是插入,更新或删除。

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

在这种情况下,您需要在插入之前设置触发器。

CREATE TRIGGER insert_total BEFORE INSERT ON mods
FOR EACH ROW SET Total = NEW.InitialScore + NEW.CurrentScore;

这会将InitialScoreTotalScore加在一起,并将其放入Total记录中。仅供参考:此触发器适用于INSERTLOAD DATA

答案 1 :(得分:0)

update MYTABLE set Total = CurrentScore - InitialScore where 1=1

它会更新所有行,如果您想更新某些特定行,请相应地更新where子句。

但如果您希望它自动更新,请使用触发器