如何在触发器中获取列的默认值?

问题描述 投票:0回答:1

我希望在某些情况下触发一列的值成为默认值。在下面的示例中,如果b为NULL,则应使用定义的默认值(即“ SYSTEM”)设置a

CREATE TABLE `t_default` (
      `n` VARCHAR(50) NOT NULL
    , `a` VARCHAR(50) NOT NULL DEFAULT 'SYSTEM'
    , `b` VARCHAR(50) NULL DEFAULT NULL
    -- To moderators: please do not edit my formatting :)
);

DELIMITER //

CREATE TRIGGER `TRG_t_default_BeforeInsert` BEFORE INSERT ON `t_default` FOR EACH ROW BEGIN
    IF NEW.b IS NULL THEN
        SET NEW.a = DEFAULT(a);
    END IF;
END
//

DELIMITER ;

不幸的是,这在插入时给出了错误消息“ '字段列表'中的未知列'a'] >>”:

INSERT INTO t_default (n) VALUES ('1');

我发现similar question,但是提供表名或db +表名也不能正常工作:

CREATE TRIGGER `TRG_t_default_BeforeInsert` BEFORE INSERT ON `t_default` FOR EACH ROW BEGIN
    IF NEW.b IS NULL THEN
        SET NEW.a = DEFAULT(t_default.a);
        -- SET NEW.a = DEFAULT(test.t_default.a);
    END IF;
END

在这种情况下,消息略有不同:“ 字段列表中的未知表't_default'

而且,我尝试在列名周围使用反引号,但没有成功。

所以,是否有可能在触发器中获取DEFAULT列?我正在使用MySQL 5.7。

谢谢。

P.S。当然,我知道我可以SET NEW.a = 'SYSTEM';

我希望在某些情况下触发一列的值成为默认值。在下面的示例中,如果b为NULL,则应使用定义的默认值(即“ SYSTEM”)设置a。创建表`t_default`(...

mysql triggers default
1个回答
0
投票

您可以尝试

© www.soinside.com 2019 - 2024. All rights reserved.