【发布时间】:2019-11-15 11:36:19
【问题描述】:
我希望某个列的值在某些条件下被强制触发为 DEFAULT。
在下面的示例中,如果 b 为 NULL,则应使用定义的 DEFAULT(即“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 ;
不幸的是,这会在插入时给出错误消息“Unknown column 'a' in 'field list'”:
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
在这种情况下,消息略有不同:“Unknown table 't_default' in field list”
另外,我尝试在列名周围使用反引号,但没有成功。
那么,是否有可能在触发器中获得列 DEFAULT?我正在使用 MySQL 5.7。
谢谢。
附:当然,我知道我可以做到SET NEW.a = 'SYSTEM';
【问题讨论】: