2014-11-03 97 views
0

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

谢谢!

回答

0

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

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