是否可以使用校验和检查行是否已更改(sql server)?
这里我们可以看到特定行的校验和值是否可以使用校验和检查行是否已更改(sql server)?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,这里我们可以看到特定行的校验和值 Create table Info ( Personid int, PersonNo int ) insert into Info(Personid,PersonNo) values(3,4) 现在我更新PersonNo的值并检查特定行的校验和 Create table Info ( Personid int, PersonNo int ) insert into Info(Personid,PersonNo) values(3,4) 校验和值已更改 因
Create table Info
(
Personid int,
PersonNo int
)
insert into Info(Personid,PersonNo) values(3,4)
现在我更新PersonNo的值并检查特定行的校验和
Create table Info
(
Personid int,
PersonNo int
)
insert into Info(Personid,PersonNo) values(3,4)
校验和值已更改
因此,从这个角度来看,我可以知道特定的行已被更改
所以我的问题是这是安全的还是准确的
校验和满足哈希函数的属性:应用校验和
如果
两个列表的对应元素具有相同的类型,并且
使用等于(=)运算符进行比较时等于。为此
定义中,指定类型的空值被视为比较
平等如果表达式列表中的某个值发生更改,则
列表的校验和通常也会更改。
但请注意
但是,校验和不改变的可能性很小。因此,我们不建议使用校验和来检测
值已更改,除非您的应用程序能够偶尔容忍
缺少一个变化。考虑使用。
当指定MD5哈希算法时,哈希字节的概率
对于两个不同的输入返回相同的结果要比
校验和
这是不安全的,
校验和
可能会为不同的数据生成重复项
在SQL Server中,要检查行是否在这两个时间段之间更改,通常会使用ROWVERSION
(或其synonim时间戳
),但必须将其作为列添加到表中。这实际上不是一个时间戳,而只是一个数据库范围的计数器,并为每个更新的行自动维护。注意,当发出UPDATE语句时,它会发生变化,内容实际上可能会保持不变,而不是校验和
或者您可以滚动自己的实时时间戳-添加所需精度的datetime列并手动更新。使用起来更简单、更好:数据类型。如果您有一个该类型的列,它将针对每个操作进行更新,因此可用于检查自读取该行以来是否发生了更改。