我正在尝试复制数据库中的Username
字段。具体来说,每当在Username
内添加包含Username
的行时,我都希望在不同的表中添加/删除UserDatabase
。为此,我正在考虑使用触发机制。
我正在思考:
CREATE TRIGGER 'addUsername' AFTER INSERT ON UserDatabase FOR EACH ROW
IF (UPDATE(Username))
BEGIN
INSERT INTO anothertable (Username) VALUES ('NewUser');
END
我的问题是,如何从Username
抓取更新的UserDatabase
并将其复制到NewUser
?还有,有没有办法删除FOR EACH ROW
,因为我只希望循环运行一次?
谢谢!
答案 0 :(得分:0)
来自manual:
在触发器主体中,您可以使用别名OLD和NEW来引用主题表(与触发器关联的表)中的列。 OLD.col_name在更新或删除之前引用现有行的列。 NEW.col_name引用要插入的新行的列或更新后的现有行。
不,你不能删除for each row
,我认为你有点误解了它。实际上没有循环。 for each row
指的是insert或update语句中的多行。当您使用一个insert语句添加多个用户时,您希望所有这些语句都被复制,对吧?不只是一个。
然后你应该注意,单引号和反引号之间存在差异。如果列或表名或任何包含不应存在的字符(如空格)或名称实际上是保留关键字,则应使用反引号。单引号,就像你用它们作为触发器名称一样,用于告诉MySQL它是一个字符串。
您的触发器应如下所示:
CREATE TRIGGER 'addUsername' AFTER INSERT ON UserDatabase
FOR EACH ROW
INSERT INTO anothertable (Username) VALUES (NEW.Username);
对于更新语句,您必须创建另一个触发器。