2015-03-11 3 views
0

У меня есть несколько таблиц в базе данных: Users, Profiles, ArticlesMySQL триггер для обнаружения изменений

Я также одна таблицы под названием Changes, который используется для административных целей. Эта таблица состоит из id, table_name, and date_created. Что мне нужно сделать - всякий раз, когда что-то добавляется, удаляется или обновляется в обычной таблице (Users, Profiles, Articles), создайте новую строку в Changes с именем обновленной таблицы и текущими временными метками.

Я искал какое-то время и пробовал много разных методов, но ничего действительно не сработало. Я знаю, что решение должно быть очень простым, может быть, кто-то может мне помочь. Спасибо за ваше время.

+0

Вы прочитали: http://dev.mysql.com/doc/refman/5.0/ru/trigger-syntax.html? – nfechner

+0

из вашего ответа. Я понимаю, что у меня было две ошибки от правильного решения. –

ответ

1

Таким образом, в этом случае вам нужно 9 триггер 3 для каждого из обычной таблицы after insert, after update, after delete

Вот за одним столом вы можете написать для других

При вставке на Users

delimiter // 
create trigger log_user_insert after insert on Users 
for each row 
begin 
    insert into Changes (table_name,date_created) values ('Users',now()); 
end; // 

delimiter ; 

Когда обновление происходит на Users

delimiter // 
create trigger log_user_update after update on Users 
for each row 
begin 
    insert into Changes (table_name,date_created) values ('Users',now()); 
end; // 

delimiter ; 

Когда удаление происходит на Users

delimiter // 
create trigger log_user_update after delete on Users 
for each row 
begin 
    insert into Changes (table_name,date_created) values ('Users',now()); 
end; // 

delimiter ; 

Я хотел бы предложить, чтобы добавить столбец action в таблице Changes и вставить имя каждого действия, а то есть вставки, обновления и удаления.

+0

OMG, похоже, работает! «Добби свободен» :) Теперь я могу поспать. Спасибо, мужик! –

0

Вам нужно создать обновления, вставки и удаления триггера на каждой из таблиц данных:

CREATE TRIGGER upd_changes_users BEFORE UPDATE ON Users 
FOR EACH ROW 
BEGIN 
    INSERT INTO changes (table_name, date_created) VALUES ('users', NOW()); 
END; 

Этот код предполагает, что столбец ID в changes является auto_generated. Вы также можете рассмотреть возможность включения столбца type в таблицу changes (чтобы различать вставку, обновление и удаление).

Смежные вопросы