利用timestamp避免更新冲突

SQL Server 里有数据类型 timestamp,这里我们将利用 timestamp 来避免更新冲突。

比如一个内容管理系统,A 正在编辑某一篇文章,B 也正在编辑该文章,A 和 B 都不知道对方在编辑这篇文章,双方保存后,都以为已经成功保存,实际上,数据库中只保存了最后提交的记录(先提交的记录被覆盖),这就造成了数据库中的数据与操作者所认为的不一样。

要避免这种更新冲突,一种方法可以采用模拟锁的形式,一个人在编辑另一个人就不允许编辑,但比较麻烦,由于这种更新冲突并非常见,投入较大精力在这上面,不值。这里使用 timestamp 轻松实现避免更新冲突。

1、表中增加一个字段 tmstmp,类型为 timestamp,参见SQL Server中timestamp(时间戳)

2、编辑文章时。增加一个隐藏域 <input type="hidden" name="timestamp" value="<%=rs("tmstmp")%>">,参见如何显示timestamp的值

3、更新文章时。
sql = "update ... where id=" & id & " and tmstmp=" & tmstmp
conn.Execute sql, effectLines
if effectLines <= 0 then
'更新失败,可能是原记录不存在,或者更新冲突
end if



有朋友反应response.Write(rs("[timestamp]")),是一片空白,可是在查询分析器中看到的是一串数字。这种情况下,在写SQL语句时这样写, select (字段名+0) as 别名,输出时就会有显示了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值