如果value为null,则将default插入非null列

时间:2012-12-13 20:06:04

标签: mysql

我有一个表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));

1 个答案:

答案 0 :(得分:21)

  INSERT INTO foo (id, message) 
  VALUES
  (i_id, IFNULL(i_message,DEFAULT(message)));