Контрольная сумма строк MySQL

Можно ли выделить всю строку в таблице и получить контрольную сумму? Я ищу способ сообщить своему коду об обновлении данных, только если была изменена хотя бы одна запись. С точки зрения отслеживания изменений данных это поможет мне оценить количество изменений, отмеченных в таблице истории. — Спасибо.

1

Решение

Вы можете объединить MD5() а также CONCAT() функции для генерации контрольной суммы MD5 для строки:

SELECT MD5(CONCAT(col1, col2, col3, ...)) as MD5_checksum FROM table;

Если один из столбцов обнуляем, убедитесь, что вы обернули его IFNULL(col, ''), как ноль будет делать результат CONCAT() также ноль.

Также имейте в виду, что это не 100% экономия. Если вы удалите 1 символ из столбца и добавите его в качестве первого символа следующего столбца, результат CONCAT() и, следовательно, хеш MD5 будет таким же.

3

Другие решения

Вы можете проверить изменения, сравнив старое значение контрольной суммы с текущей контрольной суммой.

CHECKSUM TABLE tbl_name
1

да, вы можете использовать упомянутый код

    SELECT ROW_COUNT();

а затем использовать условие вроде, если Row_Count ()> 1, то вы можете обработать данные
Надеюсь, что это работает

0

Расширение Ivars отвечает за более надежную контрольную сумму столбцов MD5;

Если вы констатируете пустое поле, вы не получите никакого результата. Если его значение NULL, замените поле буквой «A».

SELEECT MD5(concat(IFNULL(col1, "A"), IFNULL(col2, "A"), IFNULL(col3, "A")))
AS md5_checksum FROM tbl_name;
0

Этот работал очень хорошо для меня, чтобы убедиться, что структура базы данных во всех таблицах такая же, как и раньше:

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}';
0
По вопросам рекламы [email protected]