我希望在某些情况下触发一列的值成为默认值。在下面的示例中,如果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`(...
您可以尝试