2015-09-09 3 views
0

Я ищу способ создания триггера после того, как любые изменения произойдут в таблице в любой строке или в поле.MySQL Trigger After Any Changes

Я хочу, чтобы мое веб-приложение автоматически обновлялось, если они были внесены изменения в данные с момента последней загрузки. Для этого мне нужен атрибут «modified_on» для таблицы, которая будет применяться ко всей таблице, а не только к строке.

+0

Что мешает вам делать то, что вы описали? – Jocelyn

+0

Возможный дубликат [MySQL Trigger после обновления, только если строка была изменена] (http://stackoverflow.com/questions/6296313/mysql-trigger-after-update-only-if-row-has-changed) –

ответ

0

Не знаете, какие триггеры базы данных связаны с этой проблемой, так как они не смогут запускать какое-либо поведение на уровне веб-приложений. Вам нужно будет построить логику в своем веб-приложении для проверки данных, ищущих изменения. Скорее всего, это будет иметь форму некоторого инициированного клиентом процесса обновления (например, AJAX), который должен был бы вызвать сценарий приложения, который будет принимать информацию от клиента, когда он последний раз проверяет наличие обновления, и сравнить его с большинством недавно обновленные строки (строки) в таблице. До тех пор, пока у вас есть поле метки времени/DATETIME на столе и обновить каждую строку, когда он обновляется, вы можете получить все обновленные строки с помощью простого запроса, таких как

SELECT {fields} FROM {table} 
WHERE {timestamp field} > '{last time checked}' 

Я вы хотите, вы могли бы использовать это только обновлять эти строки в представлении приложения, которые нуждаются в обновлении, а не в повторной рендеринге всей таблицы (это минимизирует ширину полосы ответа/время загрузки, время рендеринга и т. д.). Если вы просто хотите проверить, была ли таблица обновлена ​​с некоторых определенных, но не заботятся о отдельных строках, вы можете просто проверить, что приведенный выше запрос возвращает 1 или несколько строк.

Если вы не хотите, чтобы просмотр клиентского приложения проверялся через регулярные промежутки времени (как это может быть сделано с AJAX), вы также можете рассмотреть веб-узлы или аналогичные возможности для двунаправленного взаимодействия клиент-сервер, но это все равно не изменит того факта, что вашему серверному приложению потребуется запросить базу данных для поиска измененных записей.

+0

База данных «*» триггеры ... не смогут запускать какое-либо поведение на уровне веб-приложения * "- не строго верно, поскольку можно использовать UDF, например [lib_mysqludf_sys] (https://github.com/mysqludf/lib_mysqludf_sys#readme), но это такая ужасная идея, что я согласен с общим настроем. – eggyal

+0

@eggyal Согласен. Это технически возможно, но это не конфигурация, которую я бы рекомендовал запустить, только с точки зрения безопасности. Хорошая ссылка для OP для чтения - https://patternbuffer.wordpress.com/2012/09/14/triggering-shell-script-from-mysql/ –