MySQL行校验和

vir*_*ion 2 php mysql sql database checksum

是否可以选择表中的整行并获得某种校验和?我正在寻找一种方法,告诉我的代码仅在更改了至少一条记录后才更新数据。从数据更改跟踪的角度来看,这将有助于我减少历史记录表中记录的许多更改。- 谢谢。

Iva*_*var 5

您可以结合使用MD5()CONCAT()函数来为该行生成MD5校验和:

SELECT MD5(CONCAT(col1, col2, col3, ...)) as MD5_checksum FROM table;
Run Code Online (Sandbox Code Playgroud)

如果其中一列是可为空的,请确保将其包装在中IFNULL(col, ''),因为null会使结果CONCAT()也为null。

另请注意,这不是100%安全的。如果您从一列中删除1个字符并将其添加为下一列的第一个字符CONCAT(),则MD5哈希的结果将是相同的。

  • 您可以通过使用`CONCAT_WS`在列之间插入逗号(或其他东西)来解决转置字符限制。xbar` =`foo,xbar`和`foox | bar` =`foox,bar`。 (2认同)

Rog*_*mas 5

您可以通过将旧校验和值与当前校验和进行比较来检查更改。

CHECKSUM TABLE tbl_name
Run Code Online (Sandbox Code Playgroud)