Использование триггеров MySQL для обновления таблицы данными last_modified - PullRequest
0 голосов
/ 13 февраля 2012

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

Я бы хотел иметь возможность сделать это один раз для всех вставок вместо того, чтобы делать это снова и снова.Если нет, я думаю, что смогу форсировать это через обёртку.

edit 1: Ну, тогда я объясню ещё немного дизайна.

У меня будет таблица вдругая база данных для обработки данных last_updated для таких вещей, как чат или "почтовый ящик" игроков, и другая база данных для разработки, например таблицы для квестов, навыков, предметов и т. д. И я хочу знать, когда таблица последний раз обновляласьтак что я могу легко увидеть, прежде чем сканировать таблицу, чтобы найти новые вещи.

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

last_modified=mysql_query("select last_modified from various_stats.table_last_updated where database_name=`database_name` and `table_name`");
if(last_modified>last_checked_time){
        data_to_get_updated=mysql_query("select something from various_<something>.table_name where last_modified>last_checked_time");
}
else{
     do_nothing;
}

edit 2: Я использую InnoDB, и поэтому я не могу использовать update_time информационной схемы, поскольку она никогда не меняется.

1 Ответ

0 голосов
/ 13 февраля 2012

поможет ли это, если я на правильном пути, который:

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'dbname'
AND TABLE_NAME = 'tabname'

Вышеупомянутое решение для myisam, для innodb нормой является установка сценария по расписанию, это можно установить какЗадание cron или задание Windows, если у вас нет такого контроля над вашим веб-хостом, вы можете настроить небольшой сервер в своем рабочем офисе и запустить cron оттуда.если вы делаете это, скажем, каждые 20 секунд, вы можете просто записать текущий самый верхний автоматически увеличенный идентификатор и использовать его в качестве подсказки; если текущий идентификатор выше, чем последний записанный идентификатор, вы обновите свои записи, чтобы показать последнее измененное время, которое должно быть сейчас.

, так как это будет только один вызов сервера каждые XX секунд, он не будет сильно забивать сервер и должен просто тихо работать в фоновом режиме.

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

...