触发更新mySQL中的特定字段

时间:2014-11-03 08:33:33

标签: mysql triggers

我正在尝试复制数据库中的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,因为我只希望循环运行一次?

谢谢!

1 个答案:

答案 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);

对于更新语句,您必须创建另一个触发器。