【问题标题】:A calculated field in mysql? [duplicate]mysql中的计算字段? [复制]
【发布时间】:2012-12-30 04:17:47
【问题描述】:

可能重复:
MySQL trigger after insert and after update

我有一张桌子,例如: 类型 |平台 |姓名 |版本 |全名

当有插入或更新时,我想用“Type.Platform.Name.Version”更新全名。

我认为 CONCAT_WS('.', Type,Platform,Name,Version) 会提供我想要的数据,但如何将其放入 FullName 字段?

我查看了触发器,但它们无法更新数据所在的同一个表。 我没有看到自动化存储过程的方法,但也许我没有完全理解它们。

也许只有可以触发的 FullName 字段的表?任何见解都值得赞赏!

【问题讨论】:

  • 您考虑过创建视图吗?
  • 您为什么认为触发器对您不起作用?
  • @JW,是的,它似乎是重复的。很抱歉!

标签: mysql stored-procedures triggers calculated-field


【解决方案1】:

您可以执行 BEFORE INSERT 和 BEFORE UPDATE 触发器。

CREATE TRIGGER fullname_update BEFORE UPDATE ON table
  FOR EACH ROW BEGIN
    SET NEW.fullname = CONCAT_WS('.', NEW.type, NEW.platform, NEW.name, NEW.version);
  END;

您可以对 BEFORE INSERT 触发器执行相同的操作。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    如果您不拘泥于特定版本的 MySQL,您可能需要考虑MariaDB,它支持“virtual columns”。这将解决您遇到的问题。

    请注意,MariaDB 是 MySQL 的一个分支,因此您仍将拥有所有标准 MySQL 功能。

    【讨论】:

      【解决方案3】:

      您的解决方案是MySQL views

      您有一个包含实际数据的表和一个称为“视图”的实体,您可以将其用作常规表 - 从中​​发出请求、进行更新等。 我用了很多次,目的和你问的完全一样,你应该去探索一下。

      当然,使用有限制,但根据您的问题,它会满足您的需求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-14
        • 2016-05-26
        • 2014-06-14
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2013-12-27
        • 2022-01-15
        相关资源
        最近更新 更多