2012-02-13 3 views
0

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

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

Редактировать 1: Хорошо, чтобы объяснить еще некоторые аспекты дизайна, которые я предполагаю тогда.

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

В основном это то, что я хотел бы сделать (или что-то подобное), я также использую 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; 
} 

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

+0

Обеспечить более подробно о вашем дизайне - это возможно, есть лучший способ сделать то, что вам нужно. –

+0

Я не знаю, какие еще данные вы хотите, но я мог бы представить, как я собираюсь структурировать таблицу для данных в таблице table_last_updated. – 133794m3r

ответ

0

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

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

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

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

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

+0

, вы бы просто получили новые данные, если на этот раз изменилось то, что у вас есть – davethecoder

+0

Нет, так как это InnoDB. InnoDB не имеет update_time в информационной схеме печально. Вот почему мне даже нужно это делать. Если бы это был MyIsam, то я бы определенно делал это, но, к сожалению, мне нужно делать работу. – 133794m3r

+0

Возможно, вы могли бы попробовать запланированные события/триггеры, чтобы обрабатывать каждые xx минуты или секунды, таким образом, может быть 20 вставок/обновлений, но вы будете регистрировать только один раз? – davethecoder

Смежные вопросы