mySQL中特定字段更新时触发

mySQL中特定字段更新时触发,mysql,triggers,Mysql,Triggers,我正在尝试复制数据库中的用户名字段。具体来说,我希望在不同的表中添加/删除用户名,只要在UserDatabase中添加包含用户名的行。为此,我考虑使用触发机制 我的思路是: CREATE TRIGGER 'addUsername' AFTER INSERT ON UserDatabase FOR EACH ROW IF (UPDATE(Username)) BEGIN INSERT INTO anothertable (Username) VALUES

我正在尝试复制数据库中的用户名字段。具体来说,我希望在不同的表中添加/删除用户名,只要在UserDatabase中添加包含用户名的行。为此,我考虑使用触发机制

我的思路是:

CREATE TRIGGER 'addUsername' AFTER INSERT ON UserDatabase FOR EACH ROW
    IF (UPDATE(Username))
        BEGIN 
        INSERT INTO anothertable (Username) VALUES ('NewUser');
        END
我的问题是,如何从UserDatabase捕获更新的用户名并将其复制到NewUser?还有,有没有办法删除每一行,因为我只希望循环运行一次

谢谢

来自:

在触发器主体中,您可以使用别名OLD和NEW引用主题表中的列以及与触发器关联的表。OLD.col_name是指更新或删除现有行之前的列。NEW.col_name是指要插入的新行或更新后的现有行的列

不,你不能删除每一行,我想你误解了一点。实际上没有循环。for each row引用insert或update语句中的多行。当您使用一条insert语句添加多个用户时,您希望复制所有用户,对吗?不止一个

然后你应该注意,单引号和反勾号之间有区别。如果列或表名或任何内容包含不应该存在的字符(如空格),或者名称实际上是保留关键字,则应使用反勾号。单引号,就像你在触发器名称中使用的那样,用来告诉MySQL它是一个字符串

您的触发器应该如下所示:

CREATE TRIGGER 'addUsername' AFTER INSERT ON UserDatabase 
FOR EACH ROW
INSERT INTO anothertable (Username) VALUES (NEW.Username);
对于update语句,必须创建另一个触发器