更新值时MYSQL触发器更新未按预期工作

更新值时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 在代

希望在行被更新时在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

在代码的开头还需要一个
分隔符
语句,
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='',请尝试