【发布时间】:2012-12-01 19:12:12
【问题描述】:
我有一个表foo,它有一个NOT NULL 列,默认名为message:
CREATE TABLE foo(
id int PRIMARY KEY,
message varchar(64) NOT NULL DEFAULT 'Hello'
)
有一个存储过程bar 插入到foo:
CREATE PROCEDURE bar(
i_id int,
i_message varchar(64)
)
BEGIN
-- other logic
IF i_message IS NOT NULL THEN
INSERT INTO foo (id, message) VALUES (i_id, i_message);
ELSE
INSERT INTO foo (id, message) VALUES (i_id, DEFAULT);
-- could also be: INSERT INTO foo (id) VALUES (i_id);
END IF;
END;
您可以看到,如果i_message 为空,我必须有条件地分支以便我的插入使用默认值。这对于一列来说很好,但考虑一下 foo 是否有更多 NOT NULL DEFAULT 列 - 语法会变得笨拙。
我是否可以使用一种语法来指定插入的值如果为 null 则应回退到默认值?我尝试了以下但可以理解的语法错误:
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));
【问题讨论】:
标签: mysql