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

如何使保存的记录的主键字段的值唯一?高手请进,常见问题

楼主gsoft(xiaoxiao)2004-12-04 19:55:42 在 Delphi / 数据库相关 提问

现有一个表,假设主键字段为BookID,它需要保持唯一性,但不知道是不是有比较好的方法?  
  我是想每次在保存前取表记录中BOOKID的最大号加1,但是现在有大约800个用户在不停的向这个表中插入记录,每插一条的bookID   都是取最大号加一,但是因为用户都同时在插入记录,想知道如何能使用记录顺利保存,而不返回‘违反约束。。。。’等字样,并且不想后客户端弹出对话框让用户重新保存或重试? 问题点数:50、回复次数:20Top

1 楼gsoft(xiaoxiao)回复于 2004-12-04 19:56:02 得分 0

helpTop

2 楼gsoft(xiaoxiao)回复于 2004-12-04 19:56:29 得分 0

help   me   ....Top

3 楼gsoft(xiaoxiao)回复于 2004-12-04 19:58:38 得分 0

helpTop

4 楼hsmserver(撒哈拉之雨的悲伤)回复于 2004-12-04 20:03:07 得分 7

在更新数据的时候锁定表Top

5 楼gsoft(xiaoxiao)回复于 2004-12-04 20:09:24 得分 0

那不行,一锁,别人就会存不进去的,不可以,800多用户,一锁哪怕0.01秒,也可能有很多用户在保存而无法保存。。。Top

6 楼Rail100(杀神之狙)(能忘掉结果,未能忘记遇上)回复于 2004-12-04 20:58:51 得分 7

MS   SQL   SERVER   2000:  
  如果只是本表唯一,用IDENTITY屬性定義該列,如果要在整個數據庫唯一,用ROWGUIDCOL屬性Top

7 楼gsoft(xiaoxiao)回复于 2004-12-04 21:58:22 得分 0

如果用identity属性,在我插入记录后,如何取得刚才插入的记录的identity值Top

8 楼gsoft(xiaoxiao)回复于 2004-12-04 22:04:18 得分 0

现在又遇到一个新的问题,我如何取得我刚插入表中的那条记录的自增值呢,  
  比如:我插入一条记录:自增值为10001  
  插入后,我想得到我刚插入的这条记录的自增值10001,这个值如何取得  
  Top

9 楼madbo(风轻扬{十年磨一剑})回复于 2004-12-04 22:13:32 得分 10

提个建议。  
  考虑换个角度。不同时让800个用户进行数据库操作,而是把他们的数据存入自定义数组里。  
  这样数据库操作的时候就每次处理一条数据,速度也不是很慢,对于800条记录应该没问题的。  
  Top

10 楼gsoft(xiaoxiao)回复于 2004-12-04 22:31:12 得分 0

to   madbo  
  楼上说的我不太明白,能否详细说说。  
  我的实际情况是这样,我的表中有一个字段是blob字段,一般可能保存文件的大小为10M以下,我现在的做法是先把非blob字段的值保存到数据库,接着再对这条记录编辑,把blob字段的内容保存到数据库中,你说的方法对这的要求可行不?Top

11 楼OverlordBlind(OverlordBlind)回复于 2004-12-04 22:39:50 得分 2

楼主的程序由服务器端吗?还是客户端自己往SQL2000里添数据?Top

12 楼gsoft(xiaoxiao)回复于 2004-12-04 23:00:34 得分 0

我的程序是cs结构的,数据服务端为oracle  
  客户端大约1000多台pc,同时使用的用户大约800多  
  用户从客户端向oracle中插入数据  
  Top

13 楼OverlordBlind(OverlordBlind)回复于 2004-12-04 23:14:37 得分 10

为了防止并发访问,自己作一个Server为客户端的请求排序吧,像madbo(风轻扬)说得那样  
                  Oracle  
                      |  
                  Server  
                    |||  
                __   |   _____  
              |       |             |  
  Client1   Client2   Client3...Top

14 楼gsoft(xiaoxiao)回复于 2004-12-04 23:28:16 得分 0

明白谢谢  
  请问oracle中的行锁如何解锁?用什么命令?Top

15 楼OverlordBlind(OverlordBlind)回复于 2004-12-04 23:31:59 得分 2

$%%@#$^&*&&^*$  
  呵呵,Oracle俺不会Top

16 楼prosimon(西蒙)回复于 2004-12-05 09:20:31 得分 2

果真是个比较复杂的问题     关注中Top

17 楼gsoft(xiaoxiao)回复于 2004-12-05 09:56:27 得分 0

如果用加锁,那么应该怎么做,象下面这样吗  
  lock   table   mytable   in   row   mode  
  insert   .........  
  commit  
  Top

18 楼gsoft(xiaoxiao)回复于 2004-12-05 09:57:19 得分 0

commit相当于解锁,是吗?  
  commit后就自动解锁刚才锁住的行吗Top

19 楼madbo(风轻扬{十年磨一剑})回复于 2004-12-05 12:02:03 得分 10

to   楼主:  
  呵呵,报歉,昨天贪睡了点,看来我提的建议您已经理解了。  
  oracle俺还没研究过,帮不上更大的忙了,深表遗憾……  
   
  to   OverlordBlind(OverlordBlind)  
   
  谢谢兄弟画图解说,还请多多指教!Top

20 楼gsoft(xiaoxiao)回复于 2004-12-05 14:46:42 得分 0

谢谢大家,  
   
  在oracle中,我刚才启动了两个sql   plus   worksheet,为说明方便,我们分别给它们叫做A   sqlplus,B   sqlplus  
  第一步:A,B都运行下面语句  
  insert   into   tbl_book(bookid,   bookname)   values(bid.nextval,   'bookname');  
  select   bid.currval   from   dual;  
  commit;  
  运行完之后A的currval当前值为100,B的currval当前值为101  
  第二步:  
  A的语句保持不变  
  B的语句删除insert语句即变为select   bid.currval   from   dual;  
  第三步:  
  先执行A中的语句,currval的前变为102  
  再执行B中的语句,currval的值还是101  
   
   
  为什么为什么B中的currval值不是102  
  Top

相关问题

  • 如何同时保存一个记录的多个字段?
  • 在 SQL 语句中用了 SELECT 字段=CASE 字段.....,用记录集保存时出错,为什么?
  • 我用TAdodataset, 新增一条记录,保存之后自增量类型的字段值返回0
  • 在线求助:SQL数据库里日期字段,我在添加新记录时,不输入该字段内容,可是在保存的时候日期字段自动给写入了1900-1-1
  • 请问如何将数据库中的二进制字段从一条记录复制到另一条记录?需不需要先保存文件作中转?
  • 简单问题:计算字段如何保存到字段中?
  • 在数据库中保存bmp字段
  • 如何在ORACLE中保存BLOB字段
  • image字段如何人保存?
  • 日期型字段怎么保存

关键词

  • 字段
  • 语句
  • 用户
  • 数据库
  • 增值
  • 数据
  • 客户
  • oracle
  • client
  • sql

得分解答快速导航

  • 帖主:gsoft
  • hsmserver
  • Rail100
  • madbo
  • OverlordBlind
  • OverlordBlind
  • OverlordBlind
  • prosimon
  • madbo

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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