RowsVersion就是
timestamp
丢失更新的解决方法
丢失更新概念:当用户同时修改一行数据,他们先读取数据,放在前端进行修改,当修改后,再提交数据,这样最后提交的数据会覆盖先前提交的数据,这样就造成了丢失更新。
长话短说,介绍防止丢失更新的方法:
使用RowsVersion时间戳。
每次更新的时候,mssql都会自动的更新rowversion的值,若一行在读前与更新前的值前后不一致,就说明有其他的事务更新了此列,这样就可以不更新此列,从而防止了丢失更新的情况。
例子 :
declare
table
tmp(a
varchar
(10),b rowsversion)
insert
into
tmp(a)
values
(
'abc'
)
事务A:
declare
@rv rowversion
select
@rv=b
from
tmp
where
a=
'abc'
waitfor delay
'00:00:05'
update
tmp
set
a=
'xyz'
where
b=@rv
事务B:
update
tmp
set
a=
'aaa'
where
b=@rv
事务A在执行完毕后会发现并没有将
'aaa'
给抹去,这样就防止了丢失更新的现象。