| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 192 人关注过本帖
标题:关于多用户操作时表锁定问题?
收藏  订阅  推荐  打印 
airfei
Rank: 2
等级:注册会员
帖子:137
积分:1494
注册:2007-4-12
关于多用户操作时表锁定问题?

是这样的,我有两个表,如下
order表
orderID serviceID serviceName state

service表
sevriceID serviceName

上面两表都是主键自增的。
我的思路是这样的:初始这两个表都是没有记录的,我想在新增一条记录的时候,先从service表取出max(serviceID)+ 1,然后插入到order表中,当这条记录插入order表后,再把order表中的serviceName插入到service表。步骤是这样:

1.从service表取出max(serviceID)+ 1,由于初始两表都无数据,所以取得的serviceID为1,然后插入order表,这时两表情况
order表
orderID serviceID serviceName state
   1        1        软件销售    1
service表
sevriceID serviceName

2.再把order表中的serviceName插入到service表,这时两表情况
order表
orderID serviceID serviceName state
   1        1        软件销售    1
service表
sevriceID serviceName
    1       软件销售

问题出现了:如果只有单个用户这样的操作是没有问题的,但是如果多个用户都在录入订单,就会出现从service表取出max(serviceID)+ 1的数据重复的问题。
1.多用户操作取得的最大serviceID相同,因为都还没有往service表插入数据
order表
orderID serviceID serviceName state
   1        1        软件销售    1
   2        1        牛奶销售    1
   3        1        订购月饼    1
  ...      ...         ...     ...

2.而这时候往service表抽入数据时,表出现这样的情况
service表
sevriceID serviceName
    1       软件销售
     2       牛奶销售
     3       订购月饼
   ...        ...

这里看出order表的serviceID和service表serviceID不一致。

而我想要的结果是这样的:
order表
orderID serviceID serviceName state
   1        1        软件销售    1
   2        2        牛奶销售    1
   3        3        订购月饼    1
  ...      ...         ...     ...

service表
sevriceID serviceName
    1       软件销售
    2       牛奶销售
    3       订购月饼
   ...        ...


我想的办法是在:多用户在asp.net程序中提交表单时,先锁定service表,不其他用户允许读,取出当前最大serviceID,插入order表,然后插入service表后,再解除service表的锁定。

但是怎么在程序中实现锁定呢?大家还有其他更好的办法吗?谢谢大家,请多指教。
搜索更多相关主题的帖子: 用户  
2008-9-15 19:16
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.049863 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved