2017-04-08 35 views
0

這裏有一個表叫USER_LOG:要記錄所有修改使用觸發器的表將事件必須是之前或之後

CREATE TABLE user_log (
    id INT(10) UNSIGNED PRIMARY KEY auto_increment, 
    user_id INT (10), 
    name VARCHAR (50), 
    username VARCHAR (32), 
    password VARCHAR (32), 
    email VARCHAR(255) NOT NULL, 
    user_type_id INT (11), 
    created DATETIME NOT NULL 
); 

要創建一個觸發器,它會記錄所有修改用戶表成上面的user_log表。它應該將舊的值插入日誌表中。

以下是我有:

DELIMITER $$ 
CREATE TRIGGER changes_log AFTER UPDATE ON user_log 
FOR EACH ROW 
BEGIN 
    IF (OLD.user_id != NEW.user_id) THEN 
     INSERT INTO user_log (id, name, username, password, email, 
     user_type_id, created) 
    VALUES(OLD.id, OLD.name, OLD.username, OLD.password, OLD.email, 
    OLD.user_type_id, OLD.created, NOW(), 'Entry Updated'); 
    END IF; 
END$$ 

這是否成功完成觸發,將所有的更改用戶表登錄到我上面創建的USER_LOG表?

+0

你試過了嗎?它看起來應該起作用,儘管可以在之前或之後寫入觸發器。 –

回答

0

我會建議使用AFTER觸發器。在用戶表中更新成功後AFTER觸發器運行。如果存在阻止更新成功的錯誤(如違反約束或類似情況),則不會有任何更改,因此不需要記錄它。

我注意到,你觸發邏輯日誌的改變只有在用戶標識更改,因爲這條線的,:

IF (OLD.user_id != NEW.user_id) THEN 

但是,如果任何其他列的變化?例如,如果用戶的電子郵件更改,您是不是想記錄更改?