【问题标题】:MySQL calculate the difference of two columns into a Total columnMySQL计算两列的差成Total列
【发布时间】:2013-11-16 02:46:57
【问题描述】:
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 列进行更改时,它会自动更新总数?

【问题讨论】:

  • 指定列类型?
  • 不是一个计算列,如果我没记错的话,你在进行规范化时会删除计算列
  • 目前没有计算我想计算但我不知道如何......

标签: mysql sql calculated-columns


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    update MYTABLE set Total = CurrentScore - InitialScore where 1=1
    

    它将更新所有行,如果您想更新某些特定行而不是相应地更新 where 子句。

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

    【讨论】:

      猜你喜欢
      • 2015-10-17
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多