sql server数据库主键自增一次增长了1000多

changzufang 2014-06-26 02:34:53
用.net做的一个信息管理系统,用的sql server数据库,把主键设置了自增,增量为1,如果是今天向表中添加信息,会按照逐条加1增长,但是明天如果再添加的话,主键的值就会比上一条数据多出1000多,搞不懂这是为什么,求大神帮忙!!
附图:
...全文
1800 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
chunsun 2016-05-26
  • 打赏
  • 举报
回复
引用 21 楼 top8843 的回复:
http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-column-Value-Jump-Is 解决方案见上面网址,国内网站也提到该解决方案,但有的把 t 大写了,导致设置无效,特别强调,t 要小写
非常不錯
qq_18983883 2016-05-26
  • 打赏
  • 举报
回复

我的数据库表也出现这种问题,数据交互用EF。不知道什么原因这个主键自增ID就会跳 很明显 求解决方案
drifter2002 2016-05-23
  • 打赏
  • 举报
回复
自增列会跳变,一般是数据库服务重启导致。 sybase有类似问题,但有个identity_gap属性可以强制设置跳变为1
gw6328 2016-05-19
  • 打赏
  • 举报
回复
网上搜一下,启动参数-t272。 但是重启之后第一次还是这样,你可以用一个test表测试好了再重启一次。
季末乱感觉 2016-05-19
  • 打赏
  • 举报
回复
这是正常的,是重启数据库服务造成的,ID跳1000是给数据同步预留的。比如两台服务器做了数据同步,其中一台服务器要重启,重启的过程中另一台服务器有新的数据插入,这1000的Id就是预留给新数据的,以避免两台服务器数据冲突。如果只有一台服务器不需要同步数据,可以配置管理器中加上启动参数-t272,重启服务后就不会跳ID了
飞天凤凰601 2016-05-19
  • 打赏
  • 举报
回复
我晕,现在的Sqlserver还有这样的事呀
羊茂林 2016-01-03
  • 打赏
  • 举报
回复
引用 26 楼 sp1234 的回复:
[quote=引用 23 楼 top8843 的回复:] 2012 新增功能,看看这个吧 http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-column-Value-Jump-Is
晕!还“新增功能”? 删除这一列然后重建这一列,这算是解决吗?这是添乱啊。[/quote] 反正这不是BUG,是微软从SQL 2012开始,故意这么设计的。至于你说删除这一列,再重建,那值都变了,还有何意义,而且如果不添加启动参数,-t272,重建列之后,还是会出现跳跃的。 也不是你所说的:“它在存储过程、触发器、删除语句、系统维护中被用过了”,即使新建的表,随便插入几条数据,其他什么都不做,重启SQL服务,也是会跳跃的。 我就将就用谷歌翻译一下: ======================== From SQL Server 2012 version, when SQL Server instance is restarted, then table's Identity value is jumped and the actual jumped value depends on identity column data type. If it is integer (int) data type, then jump value is 1000 and if big integer (bigint), then jump value is 10000. From our application point of view, this increment is not acceptable for all the business cases specially when the value shows to the client. This is the special case/issue ships with only SQL Server 2012 and older versions have no such issue. ================= 从SQL Server2012版本中,当SQL Server实例重新启动,则表的IDENTITY值跳起来,实际跳下值取决于标识列的数据类型。如果它是整数(INT)数据类型,然后跳到值是1000,如果大的整数(BIGINT),然后跳值为10000。从我们的应用程序的角度来看,这个增量是无法接受的所有的商业案例特别是当值示给客户端。这是特殊情况/问题仅随SQL Server 2012的和旧版本有没有这样的问题。
  • 打赏
  • 举报
回复
引用 楼主 changzufang 的回复:
用.net做的一个信息管理系统,用的sql server数据库,把主键设置了自增,增量为1,如果是今天向表中添加信息,会按照逐条加1增长,但是明天如果再添加的话,主键的值就会比上一条数据多出1000多,
你贴出的图中,有增加900的,有增加2的,没有增加1000多的。而且从1005跳到1007,这也是“正常”常见的现象,说明恰好此时有并发数据库事务操作或者数据库事务回滚动作了。 你只是说“比上一条数据多出1000,那么就有人去盲目去网上搜索”sql server自增列增加1000“这个词儿了。
  • 打赏
  • 举报
回复
如果你只是在自己的单机上测试,你可以随便折腾什么“自增列”,你可以在系统日志上做些重新初始化、数据库系统启动时做些初始化。但是编程者应该考虑到将来这种应用是跑在多用户并发访问的情况下,而且几个月都不会重启一次,要保证一直云运行,那些单纯考虑单用户使用、自己可以随便“删除列、再重建列”的做法,都是无意义的。 多用户访问时,自增列必定会经常跳号的。因为自增列只保证自增,而不保证连续!
  • 打赏
  • 举报
回复
引用 23 楼 top8843 的回复:
2012 新增功能,看看这个吧 http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-column-Value-Jump-Is
晕!还“新增功能”? 删除这一列然后重建这一列,这算是解决吗?这是添乱啊。
羊茂林 2015-12-23
  • 打赏
  • 举报
回复
正因为把插入的记录干掉,自增当前值也不会回来,这样就保证了他的唯一性,所以合适用来作为业务字段
羊茂林 2015-12-17
  • 打赏
  • 举报
回复
引用 13 楼 sp1234 的回复:
[quote=引用 楼主 changzufang 的回复:] 用.net做的一个信息管理系统,用的sql server数据库,把主键设置了自增,增量为1,如果是今天向表中添加信息,会按照逐条加1增长,但是明天如果再添加的话,主键的值就会比上一条数据多出1000多,搞不懂这是为什么,求大神帮忙!! 附图:
谁跟你说过自增字段保证这个字段值连续的?自增字段就是“保证数值不减小”而已。 如果你以为自增字段是做业务流水号的,那是你理解错误。[/quote] 2012 新增功能,看看这个吧 http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-column-Value-Jump-Is
ljp88888 2015-12-17
  • 打赏
  • 举报
回复
是不是你定义的时候该了
羊茂林 2015-12-17
  • 打赏
  • 举报
回复
http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-column-Value-Jump-Is 解决方案见上面网址,国内网站也提到该解决方案,但有的把 t 大写了,导致设置无效,特别强调,t 要小写
江南小鱼 2015-12-17
  • 打赏
  • 举报
回复
1、自增列,不应赋予什么特殊意义,可以作为主键,但是不要作为业务字段 2、每次执行一次插入动作,自增都会自动加1,你把插入的记录干掉,自增当前值也不会回来的
羊茂林 2015-11-19
  • 打赏
  • 举报
回复
这是个普遍问题,而且总发生在SQL服务,或者服务器重启之后。
gengchenhui 2014-11-21
  • 打赏
  • 举报
回复
看看是不是你在事务中插入的时候,出异常以后事务没有回滚???
姓小名白丶 2014-11-21
  • 打赏
  • 举报
回复
以前也经常这样做,不过还没遇到过这样的情况啊,给楼主顶起来,学习学习!!
smthgdin_020 2014-11-21
  • 打赏
  • 举报
回复
1.总是每次加1,但是有什么东西去删除? 2.有无什么事务没提交或者回滚?
marswangbo 2014-11-21
  • 打赏
  • 举报
回复
自增长的数值出现后,再删除,再插入,不会继续用这个值的,会取该表已经出现过的自增长的最大数据加1,无论这个最大的数据在不在了。。。除非truncate表从1重新开始 比如1,2,3,把3删除了,下次再插入就会从4开始,3这个值表里面是看不到的,也不会再用的。
加载更多回复(15)

111,130

社区成员

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

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

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