【问题标题】:how to create calculated field in mysql?如何在mysql中创建计算字段?
【发布时间】:2010-11-21 07:44:38
【问题描述】:

我有一张如下表:

create table info (username varchar(30),otherinfo varchar(100));

现在我想更改此表以具有新字段,并且此字段必须具有默认值

md5(username)

如下所示:

alter table info add NewField varchar(100) default md5(username);

怎么做?
感谢您的帮助

【问题讨论】:

    标签: sql mysql calculated-columns


    【解决方案1】:

    根据 MySQL docs(已添加重点),您不能在默认值中使用表达式:

    10.1.4。数据类型默认值

    数据中的 DEFAULT 值子句 类型规范表示默认值 列的值。与一个 例外,默认值必须是 持续的;它不能是一个函数或 表达式。这意味着,对于 例如,您不能设置 日期列的默认值为 NOW() 等函数的值或 当前的日期。例外是 您可以将 CURRENT_TIMESTAMP 指定为 TIMESTAMP 列的默认值。

    我已测试以下触发器适用于您的意图:

    CREATE TRIGGER MyTriggerName
      BEFORE INSERT ON info
      FOR EACH ROW
        SET NEW.NewField = md5(NEW.username);
    

    【讨论】:

      【解决方案2】:

      你应该编写一个触发器来实现这个功能,因为 MySQL 有一个内置的 md5 函数,或者你能够为 MySQL 编写或找到一个 md5 算法:)

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

      md5 功能看这里

      http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html

      另外,你应该知道 MD5 不是secure algorithm anymore

      【讨论】:

        猜你喜欢
        • 2021-12-25
        • 1970-01-01
        • 2014-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        相关资源
        最近更新 更多