powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как правильно сделать отслеживание изменений в таблицах ?
5 сообщений из 5, страница 1 из 1
Как правильно сделать отслеживание изменений в таблицах ?
    #39943417
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу сделать лог изменения данных, что бы отслеживать изменения и когда они произошли.

Рассмотрим вариант, когда пользователь меняет параметры Заказа от клиента это в одной таблице. И к этому заказу еще привязана таблица с содержанием самого заказа.
Т.е. пользователь может поменять дату заказа, его статус, комментарий написать. Это все касается одной таблицы. А может поменять содержание заказа. Может добавить новый товар, изменить цену и т.д.

Отслеживание должно быть в таком русле. Какой-то пользователь зашел в базу использую свой пароль и логин и изменил какие-то параметры заказа. И тогда должны быть сделаны соответствующие записи, что такой пользователь в такое время изменил такой перечень значений с такого значения на такое.

Есть два варианта.

Первый это все делать вручную. И при обновлении данных проверять, что изменилось и записывать вручную, что конкретно изменилось. Недостаток в том, что при большим количестве параметров все это долго описывать. И при добавление или удалении каких-то параметров это процессы надо править. В общем очень трудоемко

Второй. Можно прописать тригер на обновление данных в таблицах и записывать эти значения уже автоматизированно.
Но возникает проблема в том как потом увязать, что именно вот эти изменения были сделанные этим пользователем именно тогда. Ведь тригер будет просто писать лог изменений без привязки к конкретному пользователю. По идее когда тригер будет писать, что произошло изменение, то туда надо передавать идентификатор изменения, по которому можно будет уже связать все эти изменения в разных таблицах в единую цепочку. Но передать туда параметры не возможно. Так как это тригер.

Кто-то сталкивался как решить эту задачу ?
...
Рейтинг: 0 / 0
Как правильно сделать отслеживание изменений в таблицах ?
    #39943423
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать записать ID пользователя в сессионную переменную, а в триггере использовать это значение.
...
Рейтинг: 0 / 0
Как правильно сделать отслеживание изменений в таблицах ?
    #39943425
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle
Можно попробовать записать ID пользователя в сессионную переменную, а в триггере использовать это значение.


Хорошая идея.
А разве тригер не будет работать в своей сессиии, он ведь не зависит от них ?

Можно пример такой глобальной сессионной переменной, которая будет доступна в тригере ?
...
Рейтинг: 0 / 0
Как правильно сделать отслеживание изменений в таблицах ?
    #39943441
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonnik
как потом увязать, что именно вот эти изменения были сделанные этим пользователем именно тогда. Ведь тригер будет просто писать лог изменений без привязки к конкретному пользователю.
Это с какого перепугу-то? Кто мешает записать в лог USER() и CURRENT_USER() (а это не одно и то же, кстати!).
Jonnik
передать туда параметры не возможно. Так как это тригер.
Он вообще-то и без посторонней помощи получит всё, что нужно... если, конечно? такая информация существует в его области действия. Вот если у тебя мульён юзеров работают под одним и тем же логином, который не пишется в изменяемую таблицу - да, беда, но беда рукотворная, тобою же и созданная...
Jonnik
А разве тригер не будет работать в своей сессиии, он ведь не зависит от них ?
Триггер работает в рамках сессии (соединения), в которой выполняется запрос, вызвавший его срабатывание.
...
Рейтинг: 0 / 0
Как правильно сделать отслеживание изменений в таблицах ?
    #39943446
Jonnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Jonnik
как потом увязать, что именно вот эти изменения были сделанные этим пользователем именно тогда. Ведь тригер будет просто писать лог изменений без привязки к конкретному пользователю.
Это с какого перепугу-то? Кто мешает записать в лог USER() и CURRENT_USER() (а это не одно и то же, кстати!).
Jonnik
передать туда параметры не возможно. Так как это тригер.
Он вообще-то и без посторонней помощи получит всё, что нужно... если, конечно? такая информация существует в его области действия. Вот если у тебя мульён юзеров работают под одним и тем же логином, который не пишется в изменяемую таблицу - да, беда, но беда рукотворная, тобою же и созданная...
Jonnik
А разве тригер не будет работать в своей сессиии, он ведь не зависит от них ?
Триггер работает в рамках сессии (соединения), в которой выполняется запрос, вызвавший его срабатывание.


Там вообще один сервер и сотни баз в каждой из которых есть куча пользователей.
И создавать под каждого юзера еще и юзера в серваке это тоже не вараинт.

Про сессию понял. В принципе это решить все вопрос. Надо только это сделать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как правильно сделать отслеживание изменений в таблицах ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]