2017-04-08 1 views
0

Voici une table appelée user_log:Pour vous connecter toutes les modifications apportées à une table à l'aide d'un déclencheur de l'événement devrait être avant ou après

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

Pour créer un déclencheur qui enregistrera toutes les modifications apportées à la table des utilisateurs en la table user_log ci-dessus. Il doit insérer les valeurs OLD dans la table de journal.

Voici ce que j'ai:

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$$ 

Est-ce un déclencheur accomplir avec succès qui se connectera toutes les modifications apportées à la table des utilisateurs dans la table user_log j'ai créé ci-dessus?

+0

Avez-vous essayé? Il semble que cela devrait fonctionner, même si un déclencheur pourrait être écrit pour avant ou après. –

Répondre

0

Je suggère d'utiliser un déclencheur AFTER. Le déclencheur AFTER s'exécute après que la mise à jour a été effectuée avec succès dans la table des utilisateurs. S'il y a une erreur qui empêche la mise à jour de réussir (comme la violation d'une contrainte ou quelque chose comme ça), il n'y aura pas de changement et donc pas besoin de le connecter.

Je note que vous déclenchez la logique enregistre le changement que si les changements userid, à cause de cette ligne:

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

Mais si d'autres changements de colonne? Ne voudriez-vous pas enregistrer les modifications si, par exemple, l'adresse e-mail de l'utilisateur change?