Есть ли способ в SQL спросить "что изменилось?" - PullRequest
3 голосов
/ 11 февраля 2009

Часто я работаю над новым проектом с гигантской СУБД, схему которой я пока не понимаю. Я хочу иметь возможность пометить контрольную точку в базе данных, сделать что-то в приложении, а затем вернуться в базу данных и спросить ее, какие таблицы изменились (и в идеале, какие записи изменились).

Есть ли способ сделать что-то подобное с SQL? Я нашел это , но оно только для MSSQL (которое я не использую).

Это не должно быть супер эффективным. Это просто будет на моем устройстве разработки, и я могу подождать несколько секунд, если это будет необходимо, но я ищу что-то лучше, чем «дважды сбросить всю БД и отобразить результаты».

Ответы [ 6 ]

2 голосов
/ 11 февраля 2009

SQL Server и Oracle имеют функцию, которую вы можете включить под названием «Изменить сбор данных». Вы сказали, что не используете SQL Server, но есть надежда, если вы используете Oracle. Возможно, вам стоит упомянуть, какие БДМ вы используете.

2 голосов
/ 11 февраля 2009

Если ваша СУБД поддерживает ведение журнала запросов, включите его и установите -f в журнал.

0 голосов
/ 11 февраля 2009

В MySQL я использую столбец

modified timestamp

для получения строк, которые изменились

0 голосов
/ 11 февраля 2009

Лучше всего было бы посмотреть, предлагает ли ваша СУБД проприетарную функцию, которая будет делать это, или добавить триггеры обновления, которые бы регистрировали события.

0 голосов
/ 11 февраля 2009
  • Добавить триггеры во все таблицы, в которых регистрируются все изменения.
  • Проверьте, можете ли вы подключиться к слою доступа к данным вашего приложения для регистрации событий
  • или если он поддерживает выход из коробки. (Я думаю, что ODBC в Windows поддерживает это.)
0 голосов
/ 11 февраля 2009

Я довольно, я однажды наткнулся на прокси-инструмент MySQL, который сидел между вами и сервером.

Я сомневаюсь, что вы найдете одно решение, которое будет работать на каждой базе данных SQL. (Записать всю таблицу в файлы .SQL или .CSV до и после и отразить их?)

...