asp-sql问题,

caigp 2012-10-23 04:18:39
我有2个页面,一个页面add.asp对表user的字段num加1,另一页面sub.asp对表user的字段num减1
num原来为100
add.asp:
num=0
updsql="update user set num=num+1 where id="&id
do while num=0
conn.execute updsql,num,&H0001
loop

sub.asp:
sql="update user set num=num-1 where id="&id
num=0
do while num=0
conn.execute sql,num,&H0001
loop

num原来为100,经过100次add.asp和100次sub.asp(有可能同时访问),正常情况下,num最后值为100,可最后结果却不是,这是哪里问题?
...全文
47 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这就是访问一些允许同时并发读取数据库数量较多的数据库容易产生的问题.

只要是恰巧非常同时地访问,那么执行时,都取出同样的值,比如100,然后一个加1成了101,另一个减1成了99,同时紧接着回写到数据库里,结果不是101就是99(看哪个页面被人执行得稍晚一点点了).

所以不是ADD覆盖了SUB的结果,就是SUB覆盖了ADD的结果,最后很可能不如所愿是情理之中的,但具体结果肯定是在意料之外,根据操作情况,谁也无法预先说准它会变成什么,只能说是区间在0到200之间的随机数.

要避免这个,需要给数据库加锁.具体的方法根据你所用的数据库而定,可以自己查阅一下数据库的联机帮助或搜索相应教程.

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧