我有一个表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
为null,则我必须有条件地分支以便我的插入使用默认值。这仅适用于一列,但请考虑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));
最佳答案
INSERT INTO foo (id, message)
VALUES
(i_id, IFNULL(i_message,DEFAULT(message)));
关于mysql - 如果值为null,则将default插入到not null列中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13867593/