Можно ли выделить всю строку в таблице и получить контрольную сумму? Я ищу способ сообщить своему коду об обновлении данных, только если была изменена хотя бы одна запись. С точки зрения отслеживания изменений данных это поможет мне оценить количество изменений, отмеченных в таблице истории. — Спасибо.
Вы можете объединить MD5()
а также CONCAT()
функции для генерации контрольной суммы MD5 для строки:
SELECT MD5(CONCAT(col1, col2, col3, ...)) as MD5_checksum FROM table;
Если один из столбцов обнуляем, убедитесь, что вы обернули его IFNULL(col, '')
, как ноль будет делать результат CONCAT()
также ноль.
Также имейте в виду, что это не 100% экономия. Если вы удалите 1 символ из столбца и добавите его в качестве первого символа следующего столбца, результат CONCAT()
и, следовательно, хеш MD5 будет таким же.
Вы можете проверить изменения, сравнив старое значение контрольной суммы с текущей контрольной суммой.
CHECKSUM TABLE tbl_name
да, вы можете использовать упомянутый код
SELECT ROW_COUNT();
а затем использовать условие вроде, если Row_Count ()> 1, то вы можете обработать данные
Надеюсь, что это работает
Расширение Ivars отвечает за более надежную контрольную сумму столбцов MD5;
Если вы констатируете пустое поле, вы не получите никакого результата. Если его значение NULL, замените поле буквой «A».
SELEECT MD5(concat(IFNULL(col1, "A"), IFNULL(col2, "A"), IFNULL(col3, "A")))
AS md5_checksum FROM tbl_name;
Этот работал очень хорошо для меня, чтобы убедиться, что структура базы данных во всех таблицах такая же, как и раньше:
SET SESSION group_concat_max_len = 1000000;
SELECT MD5( GROUP_CONCAT( CONCAT( TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_TYPE ) ) ) AS md5 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '{your_database_name}';