Mysql 正在创建触发器但获取未知列错误。if语句的问题?

Mysql 正在创建触发器但获取未知列错误。if语句的问题?,mysql,sql,if-statement,triggers,sql-insert,Mysql,Sql,If Statement,Triggers,Sql Insert,我试图创建一个触发器,该触发器在插入一行后触发,如果“m_name”为NULL,则将“m_name”更新为“NOT GIVEN”。但我得到的错误是未知列错误。同样在我的问题中,else语句是否必要?我想是的,因为如果你的名字null,保持m_名称不变。很抱歉,对sql来说是个新手,非常感谢您的帮助 我看不出触发的意义。列上的默认值几乎满足您的要求: create table members ( mem_id integer not null primary key, f_name

我试图创建一个触发器,该触发器在插入一行后触发,如果“m_name”为NULL,则将“m_name”更新为“NOT GIVEN”。但我得到的错误是未知列错误。同样在我的问题中,else语句是否必要?我想是的,因为如果你的名字null,保持m_名称不变。很抱歉,对sql来说是个新手,非常感谢您的帮助


我看不出触发的意义。列上的
默认值
几乎满足您的要求:

create table members (
    mem_id integer not null primary key,
    f_name varchar(20) not null,
    m_name varchar(20) not null default 'NOT GIVEN',
    l_name varchar(20) not null,
    dob date
);
然后,插入时有两个选项

要么您没有传递要插入的列:

insert into members(mem_id, f_name, l_name, dob) 
values (1, 'myName', 'lastName', current_date)
或者您可以使用
默认值

insert into members(mem_id, f_name, m_name, l_name, dob) 
values (1, 'myName', default, 'lastName', current_date);

如果您确实希望能够为insert提供显式的
null
,并在这种情况下指定默认值,那么可能需要一个触发器。我建议在插入之前使用
触发器,这样您就可以在写入之前直接设置默认值:

delimiter //
create trigger members_no_m_name
before insert on members
for each row
begin
    if new.m_name is null
        then set new.m_name = 'NOT GIVEN';
    end if;
end//
delimiter ;

在你的情况下你不需要它

但是您只需使用
SET
而不必使用
UPDATE
但是您需要在列之前使用NEW来引用该列

NEW是一个伪行,其名称表示要输入的所有新数据

DELIMITER //
CREATE TRIGGER if_no_iilName 
AFTER INSERT ON menbers 
FOR EACH ROW
BEGIN
IF (NEW.m_name IS NULL) THEN 
    SET NEW.m_name = 'not given';
END IF;
END//
DELIMITER ;

谢谢你,完美地使用了新作品。尽管我已经厌倦了修改列以将约束设置为NOTNULL默认值NOT GIVED。不是为我工作的。。。我使用--ALTER表成员修改m_name VARCHAR列(20)NOT NULL默认值'NOT GIVEN';