在mySQL中更新特定字段时触发
问题描述:
我试图在我的数据库中复制Username
字段。具体而言,我希望在包含Username
的行被添加到UserDatabase
之内时,在不同的表中添加/删除Username
。为此,我正在考虑使用触发机制。在mySQL中更新特定字段时触发
CREATE TRIGGER 'addUsername' AFTER INSERT ON UserDatabase FOR EACH ROW
IF (UPDATE(Username))
BEGIN
INSERT INTO anothertable (Username) VALUES ('NewUser');
END
我的问题是如何从UserDatabase
捕捉更新Username
并复制到NewUser
:
我沿着线在想什么?还有,有没有办法删除FOR EACH ROW
,因为我只希望循环运行一次?
谢谢!
答
从manual:
在触发器的身体,你可以通过使用别名OLD和NEW引用列主题表格(与触发器关联的表)。 OLD.col_name在更新或删除之前引用现有行的列。 NEW.col_name引用要插入的新行的列或更新后的现有行。
不,你不能删除for each row
,我想你有点误解了。实际上没有循环。 for each row
在插入或更新语句中引用多行。当你用一个插入语句添加多个用户时,你希望所有的用户都被复制,对吗?不只是一个。
然后您应该注意,单引号和反引号之间有区别。应使用反引号,如果列或表名或任何包含不应存在的字符(如空格),或名称实际上是保留关键字。单引号,就像你用它们作为触发器的名字一样,用来告诉MySQL它是一个字符串。
你触发应该是这个样子:
CREATE TRIGGER 'addUsername' AFTER INSERT ON UserDatabase
FOR EACH ROW
INSERT INTO anothertable (Username) VALUES (NEW.Username);
对于更新语句,你必须创建另一个触发。