Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQL rows checksum

Is it possible to select entire row in a table and get sort of checksum? I am looking for a way to tell my code to update data only if at least one record has been changed. From perspective of data changes tracking it would help me to size down a number of changes noted in history table.

like image 727
virrion Avatar asked Feb 04 '16 09:02

virrion


1 Answers

You can combine the MD5() and CONCAT() functions to generate an MD5 checksum for the row:

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

If one of the columns is nullable, be sure you wrap it in IFNULL(col, ''), as a null will make the result of the CONCAT() also null.

Also be aware that this is not 100% safe. If you remove the 1 character from a column and add it as the first character of the next column, the outcome of the CONCAT() and thus of the MD5 hash will be the same.

like image 143
Ivar Avatar answered Oct 19 '22 09:10

Ivar