Fügen Sie default in die Spalte not null ein, wenn value null ist

Ich habe einen tischfoo, die eine hatNOT NULL Spalte mit einem Standardaufrufmessage:

CREATE TABLE foo(
    id int PRIMARY KEY,
    message varchar(64) NOT NULL DEFAULT 'Hello'
)

Es gibt eine gespeicherte Prozedurbar das fügt infoo:

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;

Sie sehen, ich muss bedingt verzweigen, damit meine Einfügung die Standardeinstellung verwendet, wenni_message ist Null. Das ist in Ordnung für nur eine Spalte, aber überlegen Sie, obfoo hatte viele mehrNOT NULL DEFAULT Spalten - die Syntax wäre viel zu unhandlich.

Gibt es eine Syntax, mit der ich festlegen kann, dass ein eingefügter Wert auf den Standardwert zurückgesetzt werden soll, wenn er null ist? Ich habe Folgendes versucht, habe aber verständlicherweise Syntaxfehler bekommen:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage