Pan*_*mar 6 sql t-sql sql-server sql-server-2008
Create table Info
(
Personid int,
PersonNo int
)
insert into Info(Personid,PersonNo) values(3,4)
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以看到特定行的校验和值
Select CHECKSUM(Personid ,PersonNo ) from Info
Run Code Online (Sandbox Code Playgroud)
现在我更新PersonNo的值并检查特定行的校验和
CheckSum值已更改
所以就此而言,我可以知道特定的行已被更改
所以我的问题是,这是安全还是准确?
CHECKSUM 满足哈希函数的属性:如果两个列表的相应元素具有相同的类型并且在使用等于 (=) 运算符进行比较时相等,则应用于任意两个表达式列表的 CHECKSUM 将返回相同的值。对于此定义,指定类型的空值被视为相等。如果表达式列表中的值之一发生更改,则列表的校验和通常也会更改。
但请注意
然而,校验和有极小可能不会改变。因此,我们不建议使用 CHECKSUM 来检测值是否已更改,除非您的应用程序可以容忍偶尔丢失更改。考虑使用HashBytes代替。当指定 MD5 哈希算法时,HashBytes 对于两个不同的输入返回相同结果的概率远低于 CHECKSUM。