我有一个表foo,其中有一个NOT NULL带有默认值的列message:
foo
NOT NULL
message
CREATE TABLE foo( id int PRIMARY KEY, message varchar(64) NOT NULL DEFAULT 'Hello' )
有一个存储过程bar插入到foo:
bar
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列-语法可能很笨拙。
i_message
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)));