如何自动将mysql列设置为与另一列上的操作相等?

如何自动将mysql列设置为与另一列上的操作相等?,mysql,sql,database,Mysql,Sql,Database,我希望mysql表中的一行总是等于另外两行的差,但我似乎能够做到这一点的唯一方法是第一次将其设置为0,然后运行update命令。有没有办法让这种行为自动化,这样我就不用去想它了?谢谢你的建议 您可能想研究使用,它被设置为在另一个数据库对象上发生特定操作时运行。e、 g CREATE TRIGGER foobar AFTER UPDATE ON table FOR EACH ROW SET foo = foo + NEW.bar; 您可能希望研究使用,它被设置为在另一个数据库对象上发生特定操

我希望mysql表中的一行总是等于另外两行的差,但我似乎能够做到这一点的唯一方法是第一次将其设置为0,然后运行update命令。有没有办法让这种行为自动化,这样我就不用去想它了?谢谢你的建议

您可能想研究使用,它被设置为在另一个数据库对象上发生特定操作时运行。e、 g

CREATE TRIGGER foobar AFTER UPDATE ON table
  FOR EACH ROW SET foo = foo + NEW.bar;

您可能希望研究使用,它被设置为在另一个数据库对象上发生特定操作时运行。e、 g

CREATE TRIGGER foobar AFTER UPDATE ON table
  FOR EACH ROW SET foo = foo + NEW.bar;

您还可以使用以下视图执行此操作:

create vw_table as
    select t.*, (col2 - col1) as diff
    from t;
然后,视图将在使用时进行计算,因此结果始终是最新的。您不需要将数据存储在单独的列中


缺点是无法在结果上创建列(在MySQL中)。为此,您需要一个单独的列,按照Gian所述进行维护。

您也可以使用视图进行维护:

create vw_table as
    select t.*, (col2 - col1) as diff
    from t;
然后,视图将在使用时进行计算,因此结果始终是最新的。您不需要将数据存储在单独的列中


缺点是无法在结果上创建列(在MySQL中)。为此,您需要一个单独的列,按照Gian的描述进行维护。

这是什么用例

为了数据库的完整性,您希望避免在出现错误时使用依赖值。这是我一开始没有意识到的事情之一,但在清理之后,我有一点尊重


如果你确定它是你想要的,并且你可以使用一个触发器在任何时候更新它。这个用例是什么

为了数据库的完整性,您希望避免在出现错误时使用依赖值。这是我一开始没有意识到的事情之一,但在清理之后,我有一点尊重


如果你确定它是你想要的,并且你可以使用一个触发器随时更新它。

+1,许多数据库提供计算列,但MySQL不是其中之一。触发器可能是您在这里的唯一选择。+1,许多数据库提供计算列,但MySQL不是其中之一。触发器可能是您在这里的唯一选择。