请问一下平时数据库id的操作

moonlover 2010-06-30 09:04:06
朋友换一个软件,我帮他把以前的数据导到这个软件里,其实只有商品这个表,商品这个表里有一列id,不是标识列,是int型的,我用软件随便增加了两条,生成的两条id是1和2,我后面导的时候就从3算了,导了5000条,最大的id就是5002,格式也一样,导好后再用软件增加,结果提示主键重复了,因为软件只认得刚的那两条,这条该生成3,但导的时候3已经存在的,我一只以为软件是取的最大id+1,但其实不是,想问大家下,如果这个软件是你做的,那么这个id到底从哪取的?
补充一点,用软件增加,要增加成功后id才会加1,不像标识列一样不管成功与否都加1,我原本以为在数据库的某列有存着这个id,只须改了5002就行了,但没找到,表太多了
...全文
107 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
风在指间 2010-06-30
  • 打赏
  • 举报
回复
应该是数据库里设置了触发器的原因吧
moonlover 2010-06-30
  • 打赏
  • 举报
回复
15楼说得很正确,肯定是保存在数据库的,只是几百个表,我找了好久,跟踪不太会用
moonlover 2010-06-30
  • 打赏
  • 举报
回复
是增加成功后id才+1啊,然后修改那个表的值嘛,下次用的时候就直接取就行了啊
weixiaodeshui 2010-06-30
  • 打赏
  • 举报
回复
保存Id有两种可能:
1、全局的临时变量:软件每次启动时查询表里的最大Id,然后保存。如果这样你软件重启之后就可以执行添加了。
2、保存到数据库了:每次执行添加时从表里取出当前最大Id,加1之后执行添加。添加成功在更新对应的Id记录。
我想软件应该是第二种做法。如果有源码,去源码里一看就可以知道了。如果没有,请楼主耐心找找,应该可以找到的
moonlover 2010-06-30
  • 打赏
  • 举报
回复
呵呵,终于找到那个表了,那个表专门用于存储所有的最大的id,谢谢各位了,太多表了,晕了
weixiaodeshui 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 panlaniloveyou 的回复:]
用软件增加,要增加成功后id才会加1
[/Quote]
我觉的问题应该出在软件上。既然Id不是标识的,Id肯定是在增加的时候传参进去的,因为Id是主键,添加时是不能传空值的。软件肯定保存了上次增加成功后的Id值,执行增加时把原来的Id加一。而不是想楼主所说的增加成功后才加1。
  • 打赏
  • 举报
回复
[Quote=引用楼主 panlaniloveyou 的回复:]
想问大家下,如果这个软件是你做的,那么这个id到底从哪取的?
[/Quote]

我要告诉你的是,我从来不用所谓的“自增”类型字段。

可能因为我从来不纠缠于某一种关系数据库的原因,所以我对于这种东西不会用。
醒子宇 2010-06-30
  • 打赏
  • 举报
回复
顶楼上
  • 打赏
  • 举报
回复
或者 http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&rlz=1I7GGLD_zh-CN&q=sql+server+identity&meta=lr%3Dlang_zh-CN%7Clang_zh-TW&aq=f&aqi=g3g-gs1g6&aql=&oq=&gs_rfai=

这个编号当然会空出许多位置,并不是永远连续的。

不过,通过DBCC可以重新设置起始编号,比如把5002改为从1重新开始编号。应该自己去找本SQL Server正规的开发书籍看看。
shiyuyao1987 2010-06-30
  • 打赏
  • 举报
回复
肯定是存起来,我们以前做过一个医疗原件,当时每个表的最大编号就是存在一个专门的表里面
myhope88 2010-06-30
  • 打赏
  • 举报
回复
没遇到过,帮顶下
moonlover 2010-06-30
  • 打赏
  • 举报
回复
用一个东西来存最大id,会是数据库里的列吗,还是会在txt或xml文件里呢?
moonlover 2010-06-30
  • 打赏
  • 举报
回复
我以前也是认为取最大id+1的,但这样看来不是这样的,触发器应该没有吧,我总觉得是存在哪里的,但太多了,找不到,有没有更快捷的方法
还有,那列id的类型是自定义的类型
小黑哥gs 2010-06-30
  • 打赏
  • 举报
回复
3楼说的有道理。。不过一般也就是通过MAX来获取吧。。我个人觉得哈。。他这个软件做的次了。。每次都是从第一个开始增加。。或者有设置的。。你没看见罢了
永生天地 2010-06-30
  • 打赏
  • 举报
回复
软件怎么会知道从哪个开始呢。。。。

一定是数据库里还有其他的表配置了当前的最大值
51Crack 2010-06-30
  • 打赏
  • 举报
回复
有没有触发器?!
ivws_19 2010-06-30
  • 打赏
  • 举报
回复
没太明白
是我的话,取max(id)的值,然后+1,再插入

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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