Mysql 正在创建触发器但获取未知列错误。if语句的问题?
我试图创建一个触发器,该触发器在插入一行后触发,如果“m_name”为NULL,则将“m_name”更新为“NOT GIVEN”。但我得到的错误是未知列错误。同样在我的问题中,else语句是否必要?我想是的,因为如果你的名字null,保持m_名称不变。很抱歉,对sql来说是个新手,非常感谢您的帮助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
我看不出触发的意义。列上的
默认值
几乎满足您的要求:
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';