更新值时MYSQL触发器更新未按预期工作
希望在行被更新时在MYSQL表上使用触发器,只要行被更新。仅当id字段为空时设置id更新值时MYSQL触发器更新未按预期工作,mysql,sql,sql-update,database-trigger,Mysql,Sql,Sql Update,Database Trigger,希望在行被更新时在MYSQL表上使用触发器,只要行被更新。仅当id字段为空时设置id create trigger before_id_update BEFORE UPDATE ON USERS for each row BEGIN if id iS NULL THEN SET id = username END IF; END 当前,在更新表行时没有发生任何事情,因为id和username是未定义的变量,因此您的代码应该会引发语法错误。如果要访问更新行上的值,请使用伪表NEW或OLD 在代
create trigger before_id_update
BEFORE UPDATE
ON USERS for each row
BEGIN
if id iS NULL THEN
SET id = username
END IF;
END
当前,在更新表行时没有发生任何事情,因为
id
和username
是未定义的变量,因此您的代码应该会引发语法错误。如果要访问更新行上的值,请使用伪表NEW
或OLD
在代码的开头还需要一个分隔符
语句,set
命令应该以分号终止
你大概想要:
delimiter //
create trigger before_id_update
before update on users
for each row
begin
if new.id is null then
set new.id = new.username;
end if;
end
//
delimiter ;
请注意,只有当
id
和username
具有相同的数据类型时(从它们的名称看不明显),这才有意义。谢谢,我确实更新了您的代码,但正如您指出的,id是varchar(255),username是varchar(100)。这能解释为什么更新不起作用吗?@jmadd:这样,它就会起作用。这两个都是字符串,您正在将最短的字符串分配给最长的字符串,因此没有问题。谢谢,没有错误,但值没有更新。@jmadd:那么这意味着新的id
不是null
。也许是空字符串?如果new.id为null或new.id='',请尝试。