У меня есть таблицы на основе InnoDB, с которыми я могу проверить:
checksum table _table_name_
Это медленно, если в таблице находятся миллионы записей. Интересно, есть ли способ узнать, была ли таблица изменена или нет?
Мне нужно было что-то быстрое и дешевое в запросе, и меняющееся каждый раз, когда вносятся изменения в любую из записей таблицы. Я ничего не нахожу для таблиц InnoDB. Есть что-то?
С уважением Феликс
Ответ 1 · рейтинг 1 · ypercubeᵀᴹ
Если у вас есть метка времени (скажем, LastUpdateTS) в таблице, созданной с настройками по умолчанию, и индекс для нее, то это должно быть довольно быстро. Он будет ловить только вставки и обновления, но не удаления:
SELECT MAX(LastUpdateTS)
FROM TableX
Из MySQL Docs, Timestamp Properties:
В операторе CREATE TABLE первый столбец TIMESTAMP может быть объявлен любым из следующих способов:
С предложениями DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP столбец имеет текущую отметку времени для значения по умолчанию и автоматически обновляется.
Если вы хотите поймать любое изменение в таблице (включая удаления), триггер может быть лучшим решением. Каждый раз, когда оператор INSERT, UPDATE или DELETE действует на таблицу, триггер может обновить вспомогательную таблицу.
Ответ 2 · Niklas Lindblad
Более поздние версии MySQL сохраняют метку времени для каждого обновления таблицы:
SELECT UPDATE_TIME
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'dbname'
AND TABLE_NAME = 'tabname'