2014-11-03 41 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); 

對於更新語句,你必須創建另一個觸發。