В нижнем колонтитуле моей страницы я хотел бы добавить что-то вроде «последнее обновление xx / xx / 200x», причем эта дата является последним обновлением определенной таблицы mySQL.
Каков наилучший способ сделать это? Есть ли функция для получения последней обновленной даты? Должен ли я обращаться к базе данных каждый раз, когда мне нужно это значение?
Ответы:
В более поздних версиях MySQL вы можете использовать
information_schema
базу данных, чтобы сообщить вам, когда была обновлена другая таблица:Это, конечно, означает открытие соединения с базой данных.
Альтернативным вариантом будет «прикасаться» к конкретному файлу при каждом обновлении таблицы MySQL:
Об обновлениях базы данных:
O_RDRW
режимеclose
это сноваили в качестве альтернативы
touch()
PHP-эквивалентutimes()
функции для изменения временной метки файла.На странице отображения:
stat()
для считывания времени изменения файла.источник
show table status
используетinformation_schema.tables
)UPDATE_TIME
метод, иshow table status
метод ниже доступны только для движка MyISAM, но не для InnoDB. Хотя это перечислено как ошибка , это упомянуто в Справочнике MySQL 5.5 , который также говорит, чтоfile_per_table
режим - ненадежный индикатор времени модификации.У меня нет базы данных information_schema, использующей mysql версии 4.1.16, поэтому в этом случае вы можете запросить это:
Он вернет эти столбцы:
Как вы можете видеть, есть столбец с именем: « Update_time », который показывает время последнего обновления вашей_таблицы .
источник
Я удивлен, что никто не предложил отслеживать время последнего обновления в строке:
Это обновляет метку времени, даже если мы не упомянули об этом в ОБНОВЛЕНИИ.
Теперь вы можете запросить MAX ():
Следует признать, что для этого требуется больше памяти (4 байта на строку для TIMESTAMP).
Но это работает для таблиц InnoDB до версии 5.7.15 MySQL, которая
INFORMATION_SCHEMA.TABLES.UPDATE_TIME
не.источник
Простейшей вещью было бы проверить временную метку файлов таблицы на диске. Например, вы можете проверить в вашем каталоге данных
Это должно дать вам список всех таблиц с таблицей, когда она последний раз изменялась в самый старый раз.
источник
Для получения списка последних изменений таблицы используйте это:
источник
UPDATE_TIME
нулевые? Любая идея?Я бы создал триггер, который ловит все обновления / вставки / удаления и записывает метку времени в пользовательскую таблицу, что-то вроде tablename | отметка времени
Просто потому, что мне не нравится идея читать внутренние системные таблицы сервера БД напрямую
источник
UPDATE_TIME
колонки, как в MySQL.Хотя есть принятый ответ, я не чувствую, что он правильный. Это самый простой способ достичь того, что нужно, но даже если он уже включен в InnoDB (на самом деле документы говорят вам, что вы все равно должны получить NULL ...), если вы читаете документы MySQL , даже в текущей версии (8.0) использование UPDATE_TIME не правильный вариант, потому что:
Если я правильно понимаю (не могу проверить это на сервере прямо сейчас), метка времени сбрасывается после перезапуска сервера.
Что же касается реальных (и, ну, дорогих) решений, у вас есть Билл Karwin в решении с CURRENT_TIMESTAMP , и я хотел бы предложить другую, которая основана на триггерах (я использую это один).
Вы начинаете с создания отдельной таблицы (или, может быть, у вас есть какая-то другая таблица, которая может быть использована для этой цели), которая будет работать как хранилище для глобальных переменных (здесь отметки времени). Вам нужно сохранить два поля - имя таблицы (или любое другое значение, которое вы хотите сохранить здесь в качестве идентификатора таблицы) и метку времени. После того, как он у вас есть, вы должны инициализировать его с этим идентификатором таблицы + дата начала (NOW () - хороший выбор :)).
Теперь вы перемещаетесь в таблицы, которые хотите наблюдать, и добавляете триггеры ПОСЛЕ ВСТАВКИ / ОБНОВЛЕНИЯ / УДАЛЕНИЯ с помощью этой или аналогичной процедуры:
источник
Анализ уровня ОС:
Найти, где БД хранится на диске:
Проверьте последние изменения
Должен работать на всех типах баз данных.
источник
Просто возьмите дату изменения файла из файловой системы. На моем языке это:
Вывод:
источник
Если вы работаете в Linux, вы можете использовать inotify для просмотра таблицы или каталога базы данных. inotify доступен из PHP, node.js, perl и я подозреваю большинство других языков. Конечно, вы должны были установить inotify или ваш провайдер установил его. Много провайдеров не будет.
источник
Не уверен, что это будет интересно. Использование mysqlproxy между mysql и клиентами и использование сценария lua для обновления значения ключа в memcached в соответствии с интересными изменениями в таблице UPDATE, DELETE, INSERT было решением, которое я сделал совсем недавно. Если оболочка поддерживает хуки или триггеры в php, это может быть eaiser. Ни одна из обёрток на данный момент не делает этого.
источник
я сделал столбец по имени: update-at в phpMyAdmin и получил текущее время от метода Date () в моем коде (nodejs). при каждом изменении таблицы в этом столбце хранится время изменений.
источник
а) он покажет вам все таблицы и там даты последнего обновления
затем вы можете запросить конкретную таблицу:
б) Как и в приведенных выше примерах, вы не можете использовать сортировку по «Update_time», но с помощью SELECT вы можете:
далее спросить о конкретной таблице:
источник
Это то, что я сделал, надеюсь, это поможет.
источник
Кэшируйте запрос в глобальной переменной, когда он недоступен.
Создайте веб-страницу для принудительной перезагрузки кэша при его обновлении.
Добавьте вызов на страницу перезагрузки в ваши сценарии развертывания.
источник