SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.07.2008 10:49:26

Fillida
Участник
Зарегистрирован: 24.07.2008
Сообщений: 5

Возможно ли это реализовать триггером

Доброго времени суток!
Заранее извиняюсь за возможную некомпетентность,но с базами данных (любыми) я ранее работала исключительно,как программист просто использующий функционал баз,т.е. писались программы на С++, Java работающие с базами.А собственно запросами и прочим я не занималась.
Но сейчас в процессе работы возникла задча,которую надо решить, я бы хотел уточнить у Вас как у знатаков smile

Задача: Есть база, которая обновляется каждый день, интересует возможно ли как то учитывать позиции в которых база изменилась,ну и собственно как то их выводить(записывать)
Пример:
Есть таблица   ID     Name    Name_comp
                      1    Vasja         Super_Vasja
после обновления
                      ID      Name     Name_comp
                      1       Vasja       Bad_Vasja
Хочется что бы в итоге доупстим либо создалась таблица,в которой было учтено изменение(вообще без разницы как учитывать изменение,главное учесть)
Таблица изменений
                       ID    Bil                     Stal
                        1     Super_Vasja      Bad_Vasja

Неактивен

 

#2 24.07.2008 12:14:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Возможно ли это реализовать триггером

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

CREATE TRIGGER au_tbl_logger AFTER UPDATE ON tbl FOR EACH ROW
INSERT INTO tbl_log (old, new) VALUES (OLD.field, NEW.field);

CREATE TRIGGER ad_tbl_logger AFTER DELETE ON tbl FOR EACH ROW
INSERT INTO tbl_log (old, new) VALUES (OLD.field, NULL);

CREATE TRIGGER ai_tbl_logger AFTER INSERT ON tbl FOR EACH ROW
INSERT INTO tbl_log (old, new) VALUES (NULL, NEW.field);

P.S. Прочитал заголовок сообщения. Вы в правильную сторону смотрели wink

Неактивен

 

#3 24.07.2008 12:22:04

Fillida
Участник
Зарегистрирован: 24.07.2008
Сообщений: 5

Re: Возможно ли это реализовать триггером

Огромное спасибо! буду эксперментировать)

Неактивен

 

#4 24.07.2008 13:48:00

Fillida
Участник
Зарегистрирован: 24.07.2008
Сообщений: 5

Re: Возможно ли это реализовать триггером

простите,можно ещё один ну совсем уж глупый вопрос...а каким образом описывается,то в каком формате триггер будет полученное значение записчывать в другую таблицу ( в какой столбец и пр.) Заранее огромное спасибо!

Неактивен

 

#5 24.07.2008 14:08:44

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Возможно ли это реализовать триггером

Ээ... то есть? В формате колонки wink Там же явно указано, что будет выполняться:
INSERT INTO tbl_log (old, new) VALUES (OLD.field, NEW.field);

Неактивен

 

#6 24.07.2008 14:29:00

Fillida
Участник
Зарегистрирован: 24.07.2008
Сообщений: 5

Re: Возможно ли это реализовать триггером

ну я как собственно всегда) сначала задала вопрос..а потом только решила подумать..)))извиняюсь
эксперементирую с триггерами на простейших таблицах (описанных выше)
у меня выпадает ошибка(при попытке изменения поля) SQL Error : Field 'Id' doesn't have a default value
и собственно аблица лога не изменяется sad

Неактивен

 

#7 24.07.2008 17:20:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Возможно ли это реализовать триггером

Подозреваю, что в таблице лога у Вас есть поле Id, у которого нет значения по-умолчанию wink

Неактивен

 

#8 25.07.2008 09:59:25

Fillida
Участник
Зарегистрирован: 24.07.2008
Сообщений: 5

Re: Возможно ли это реализовать триггером

всё заработало.. спасибо! бесконечно благодарна smile)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson