【问题标题】:MySQL - Can you retrieve the default value of a column?MySQL - 您可以检索列的默认值吗?
【发布时间】:2012-03-22 06:47:52
【问题描述】:

我正在考虑创建一个 TRIGGER,如果 INSERT 值恰好是空字符串,它将将列的值设置为其默认值。

我的触发器如下所示:

CREATE TRIGGER column_a_to_default 
BEFORE INSERT ON table
FOR EACH ROW
BEGIN
IF NEW.a = '' THEN
SET NEW.a = 'some value';
END IF;
END

我想知道是否可以将“某个值”替换为将其设置为列的默认值的方法。即

SET NEW.a = a.DEFAULT

谢谢

【问题讨论】:

    标签: mysql triggers insert default


    【解决方案1】:

    这应该适合你

    SET NEW.a = DEFAULT(NEW.a)
    

    编辑: 好像不行。

    使用此解决方法

    IF NEW.a = '' THEN
       SELECT COLUMN_DEFAULT INTO @def
       FROM information_schema.COLUMNS
       WHERE
         table_schema = 'database_name'
         AND table_name = 'your_table'
         AND column_name = 'a';
       SET NEW.a = @def;
    END IF;
    

    你也可以试试

    SET NEW.a = DEFAULT(table_name.a)
    

    【讨论】:

    • 哇,我四处寻找,找不到任何东西,伪代码真的很接近。谢谢!
    • 实际上,如果提供的值与 TRIGGER 中的 IF 语句匹配,则会创建“列 'a' 不能为空”的警告。
    • 或者更好的DEFAULT(a)。请参阅文档:MySQL 的 DEFAULT() 函数。
    • 我收到一个新错误“'字段列表'中的未知列'a'”。我正在检查一个空字符串并希望提供该列的默认值。我的插入看起来像这样:INSERT INTO table ( a, b, c ) VALUES ( '', 'two', 'three' )
    • 很抱歉,我在a 忘记了NEW.。查看我的更新并重试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多