hur.cn - 华软网

 热门搜索

大家都是怎么管理记录的唯一性的啊? 苦恼…………

  作者:未知    来源:网络    更新时间:2015/12/6
一张表里存放商品的记录,对这些记录有增删改等操作,每一行有一个记录号,作为主键,用来唯一标识这行记录,现在问题是怎么维护这个记录号呢?  
比如增加一行时,这个记录号从哪里获得,是都上一条记录的行号吗?删除的时候呢?是删掉后不管恢复呢,还是删除了这条记录再把这个记录号拣回来呢?
假如增加一条提交一条的话没问题,但一次增加很多条呢?还能读上一行的记录号吗?这样总觉得不保险…………  我用sql server 2000
苦恼中…………大虾救我!
------华软网友回答------
如果记录号只是为了记录唯一性,无别的用途   
那不妨用数据库随机增加的方法

------华软网友回答------
用自增量吧,
如果你不喜欢自增量的话,
也可以自己写代码,你的问题
完全可以解决的,我就是自己增加ID号的。

------华软网友回答------
这个问题我也曾经困了很久,后来我干脆用系统时间来当主键,是日期+小时+分钟
。不知道对你有帮助否?
------华软网友回答------
boolean  lb_new=true,lb_first=true
long li_row
string ls_maxcode
decimal ld_maxcode

//单号前缀,单号自增序号的增加
for li_row=1  to  dw_1.rowcount()
   if dw_1.getitemstatus(li_row,0,primary!)=newmodified!  then
       if  lb_first=true then
           inv_tblcode_id.of_getmaxcode(ld_maxcode)
           dw_1.setitem(li_row,inv_tblcode_id.of_getdwcode(),ld_maxcode)
  lb_first=false
else
           ld_maxcode++
           dw_1.setitem(li_row,inv_tblcode_id.of_getdwcode(),ld_maxcode)
end if
end if
next

return success

//inv_tblcode_id.of_getmaxcode
string ls_syntax
decimal ld_maxcode

ls_syntax='SELECT max('+is_tblcode+') FROM '+is_tblname+''
declare lp dynamic procedure for sqlsa ;
prepare  sqlsa  from :ls_syntax;
execute dynamic lp;
fetch lp into :ld_maxcode ;
close lp;

if sqlca.sqlcode<>0 then 
 f_msg('e','o','数据操作失败,出现动态游标错误!')
 return -1
end if

if  isnull(ld_maxcode) then 
  ld_maxcode=0
  end if
  ld_maxcode++
  ad_maxcode=ld_maxcode
return 1


------华软网友回答------
用自增量、用时间戳都可,而且相对简单,自己维护自增量容易发生错误!

------华软网友回答------
我也曾想过用康尼的办法。
------华软网友回答------
创建一个序列,再写个触发器。在insert的时候触发从序列中检索。
------华软网友回答------
我觉的还是建立一个流水号表比较好,这样也不容易锁住。
------华软网友回答------
建立编号数据库
------华软网友回答------
这个记录号只有唯一标识的作用
      不过,………… sql server有自增量吗?
  嗯,用时间到时一个好主意…………
                                    谢谢大家
  以前我都是增加纪录前,从一张系统表里读取最后一行的行号,成批数据
添加完成后再将新的最后一行的行号写回系统表,中间有删除的话,该行行号
就废弃不用了。

------华软网友回答------
没有想到,有比我先来的。。我也是用是当前日期+时间+随机数来管理的
我试过,没有问题而且我的程序也是这样做的。
          :)

------华软网友回答------
不赞成用日期+时间+随机数的方法,这样的唯一号会产生一系列的问题,比如检索速度,远没有数值型的自增列来的快,而且如果某天一不小心改了系统时间,产生的后果更严重。
我在设置唯一值时考虑以下两种方法,如果是基本数据,而且量不是很多的话,让用户维护,就是让用户输入不同的值,如果量大的话,采用增加一个表的方式,就是作一个只有一个列的表,而且这个列本身就是自增列,然后每增加一条记录,则新在这个表里增加一条记录,取号码,然后赋给要操作的数据窗口的。如果某个表的主键对应有外部键,也是采用这种方法,如果主键没有外部键对应,则就采用一个NUMERIC类型的自增列的方法完成。
------华软网友回答------
以前做帐务也有类似的问题,还的考虑并发n个用户主键竞争的问题!
如果你的主键只是作为唯一性标志,建议用日期+时间+用户ID号,终端的用户取服务器的时间,这样冲突的可能性可以减少到最小

------华软网友回答------
max(id) + 1  永远不会产生重复。定期进行 id重排。 :))

------华软网友回答------
SQL SERVER中不是已经提供了ID可以自增的吗?何必麻烦的想其它呢。
------华软网友回答------
真是大开眼界,谢谢大家啦
                       为图省事,目前用的是自增量。
结贴
------华软网友回答------
加分再结贴   :)      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。