avatar

как на MYSQL написать тригер аудита изменений, чтобы записывать изменения в таблице

Рейтинг 4 из 5. Голосов: 250
Den 6 лет назад
2
,

0


Ответы (2)

Den
avatar
Модератор За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений За 700 сообщений №1 по сообщениям
1026 Mar 10
6 лет назад
как на MYSQL написать тригер аудита изменений, чтобы записывать изменения в таблице
отправить
+ 0

Redy
avatar
За 6 месяцев на форуме За год на форуме За два года на форуме за 10 сообщений За 100 сообщений за 500 сообщений
503 Mar 10
6 лет назад
можно например так
CODE:
CREATE TABLE logevents ( id int(11) NOT NULL AUTO_INCREMENT, event text NOT NULL, timeevent timestamp DEFAULT CURRENT_TIMESTAMP, id_user int(11) NOT NULL DEFAULT 0, ip varchar(255) NOT NULL DEFAULT 'not indef', old_value varchar(255) DEFAULT NULL, new_value int(11) DEFAULT NULL, typeeventint(11) DEFAULT NULL, PRIMARY KEY (id))ENGINE = INNODBCHARACTER SET utf8COLLATE utf8_general_ciCOMMENT = 'запись событий';
треггер на обновление
CODE:
CREATE DEFINER = 'root'@'127.0.0.1'TRIGGER audit_changeAFTER UPDATEON tible_for_auditFOR EACH ROWBEGINIF (@DISABLE_TRIGGERS IS NULL) THENIF (OLD.field1 <> NEW.field1) THENINSERT INTO log_events set event='field1',old_value=OLD.field1, new_value= NEW.field1;END IF;IF (OLD.field2<> NEW.field2) THENINSERT INTO log_events set event='field2' ,old_value=OLD.field2,new_value= NEW.field2; END IF;IF (OLD.field3<> NEW.field3) THENINSERT INTO log_events set event='field1',old_value=OLD.field2, new_value= NEW.field2; END IF;END IF;
и триггер на удаление после
CODE:
CREATE DEFINER = 'root'@'127.0.0.1'TRIGGER audit_del AFTER DELETE ON table FOR EACH ROWIF (@DISABLE_TRIGGERS IS NULL) THEN INSERT INTO logevents set event='field2', old_value=OLD.field2, idrole= OLD.id, typeevent=3; INSERT INTO logevents set event='field3' , old_value=OLD.field3, idrole= OLD.id, typeevent=3; END IF
отправить
+ 0


Чтобы оставить комментарий войдите или зарегистрируйтесь