CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

手工设置id增号,怎样才能避免两个客户端同时上传时ID号相同的问题呢?

楼主lgfong(铃雪儿)2003-09-04 14:46:02 在 MS-SQL Server / 疑难问题 提问

手工设置id增号,怎样才能避免两个客户端同时上传时ID号相同的问题呢? 问题点数:50、回复次数:10Top

1 楼yujohny(踏网无痕)回复于 2003-09-04 14:55:07 得分 5

在新增触发器里设置id增号,多用户操作触发器肯定是按顺序一个一个用户执行的Top

2 楼txlicenhe(马可)回复于 2003-09-04 14:55:51 得分 5

/**********     加锁       ***************  
  设table1(A,B,C)  
  A         B         C  
  a1       b1       c1  
  a2       b2       c2  
  a3       b3       c3  
   
  1)排它锁  
  新建两个连接  
  在第一个连接中执行以下语句  
  begin   tran  
        update   table1  
        set   A='aa'  
        where   B='b2'  
        waitfor   delay   '00:00:30'     --等待30秒  
  commit   tran  
  在第二个连接中执行以下语句  
  begin   tran  
        select   *   from   table1  
        where   B='b2'        
  commit   tran  
   
  若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒  
   
  2)共享锁  
  在第一个连接中执行以下语句  
  begin   tran  
        select   *   from   table1   holdlock   -holdlock人为加锁  
        where   B='b2'    
        waitfor   delay   '00:00:30'     --等待30秒  
  commit   tran  
   
  在第二个连接中执行以下语句  
  begin   tran  
        select   A,C   from   table1  
        where   B='b2'    
        update   table1  
        set   A='aa'  
        where   B='b2'        
  commit   tran  
   
  若同时执行上述两个语句,则第二个连接中的select查询可以执行  
  而update必须等待第一个连接中的共享锁结束后才能执行   即要等待30秒  
   
  3)死锁  
  增设table2(D,E)  
  D         E  
  d1       e1  
  d2       e2  
  在第一个连接中执行以下语句  
  begin   tran  
        update   table1  
        set   A='aa'  
        where   B='b2'    
        waitfor     delay   '00:00:30'  
        update   table2  
        set   D='d5'  
        where   E='e1'    
  commit   tran  
         
  在第二个连接中执行以下语句  
  begin   tran  
        update   table2  
        set   D='d5'  
        where   E='e1'    
        waitfor     delay   '00:00:10'  
        update   table1  
        set   A='aa'  
        where   B='b2'      
  commit   tran  
   
  同时执行,系统会检测出死锁,并中止进程  
   
   
  --------------------------------------------------------------  
  SET   IMPLICIT_TRANSACTIONS     ON   --用户每次必须显式提交或回滚。否则当用户断开连接时,  
                                                              --事务及其所包含的所有数据更改将回滚  
   
  SET   IMPLICIT_TRANSACTIONS     OFF   --自动提交模式。在自动提交模式下,如果各个语句成功  
                                                                --完成则提交。Top

3 楼waterw(water)回复于 2003-09-04 14:55:53 得分 10

三种方法  
  1、取得最大号后,立即更新此表,最好写在一句中。  
  2、事务保护,取表中最大值时,用独占锁锁定,更新后立即释放。  
  3、设置一抢号表,只要是要取的ID的统统累加。  
  这三种方法各有利蹩,视情况定。Top

4 楼lgfong(铃雪儿)回复于 2003-09-04 15:05:45 得分 0

如果同一客户在同一时间所发布上去的一批记录的ID增号是相同的那又怎样解决呢?Top

5 楼newdongkui(孤独的老乌鸦)回复于 2003-09-04 15:13:07 得分 5

使用newid   ,就好啦,稍微占点空间而已。全球唯一哦Top

6 楼wengdy2000(浪子)回复于 2003-09-04 15:52:09 得分 5

铃雪儿:  
  这种情况很少见的,  
  不知道你看到过没有,Top

7 楼nobelpu(老蒲)回复于 2003-09-04 16:14:59 得分 5

ID相同好解决,ID断号就难解决了。Top

8 楼liao2001(知之为知之,不知为不知。。。)回复于 2003-09-04 17:07:51 得分 10

如果只操作一个表,试试这个:  
  begin   tran  
  update   table1   set   a=1       //a   为字段名  
  where   1==2    
  。。。//select、insert、delete   。。。  
  commit   tran  
   
  如果操作多表,并且客户端是由自己设计的话,对表进行相同顺序的加锁;  
  考虑到多个系统访问相同db,可以考虑加入加锁超时Top

9 楼subscribe(subscribe)回复于 2003-09-04 17:16:50 得分 2

gzTop

10 楼lionstar(小狮子)回复于 2003-09-04 18:01:41 得分 3

可以先建立一个表,其中包含自动增长字段,插入前取出id号,@@identify  
  然后应用作为插入记录的主键就可以了。  
  开心就好!!!Top

相关问题

  • 为什么相同进程ID却不相同???
  • 如何让客户机的时间和服务器的时间相同?
  • 怎么每天会在相同的时间内客户端就变得很慢
  • 请问如何避免同一数据库中相同纪录的产生
  • 如何避免数据库重复插入相同记录?asp+sql server 2000!!!
  • 发邮件给多个群组用户,而其中有用户id存在于两个以上群组中,如何避免该用户收到多个相同邮件呢??
  • 多个相同ID赋值的问题??
  • 一个为了避免客户不耐烦的弹出窗口写法
  • windows2000 advance服务器,如何使客户机的日期时间与服务相同。
  • 多个客户端能否同时用相同的用户名和密码登陆sql server2000(混合模式)?

关键词

  • 语句
  • 执行
  • 连接
  • 客户
  • 用户
  • 加锁
  • tran
  • 相同
  • 表
  • 客户端

得分解答快速导航

  • 帖主:lgfong
  • yujohny
  • txlicenhe
  • waterw
  • newdongkui
  • wengdy2000
  • nobelpu
  • liao2001
  • subscribe
  • lionstar

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo