删除一条自动增长列记录,在下次插入数据时怎么让自动增长接着前面的序号?

YJL5555 广安中学 政府大道  2013-06-09 03:31:20
[B][size=7][size=6]删除一条自动增长列记录,在下次插入数据时怎么让自动增长接着前面的序号?[/size][/size][/B]
例如:有1 2 3 4 5 条记录,删除5后,下次插入时是5而不是6?
来源: http://www.cxy.me/bbs/announce.asp?boardid=26
...全文
1183 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bw555 2015-02-10
需要自己实现锁机制吧,比较麻烦,建议调整业务逻辑 话说这帖子好老…………
回复
苦瓜蛋糕 2015-02-10
序列的值对于机器来说5和6没任何区别,只要是唯一的,所以不可能的。 问题的原因在于你的系统将序列的值用到了业务逻辑上,这点是要不得的
回复
zha_sir 2015-02-04
如果不重新新建序列或修改序列的话是办不到的
回复
haoguoqin 2015-01-31
不能自动补
回复
绕天涯_2014 2015-01-30
Sequence没有prevalue一说,序列的值只能增加,不能减小,除非到达最大值且设置了cycle可以回收,序列会从最小值重新开始增加。要实现这个功能只能重新创建序列,或者用sql查出当前值,在插入数据时,加1后作为插入的值,插入数据库
回复
yuyeyi 2014-05-09
引用 11 楼 DYFDWX 的回复:
序列本身是没有意义的,只是一个主键作用。 如果用select max(id) from table 则效率低,而且会有并发问题。
可以用java内的缓存,每次取出几十个或几百个, 如果用完了就再去取。 这样并发也没问题了。
回复
DYFDWX 2014-04-29
序列本身是没有意义的,只是一个主键作用。 如果用select max(id) from table 则效率低,而且会有并发问题。
回复
十年基民 2014-04-28
不要seq,每次自己查询当前最大值?
回复
yuyeyi 2014-04-28
这个序列没办法,只能自己控制。
回复
大脸猫o 2014-03-13
引用 楼主 YJL5555 的回复:
[B][size=7][size=6]删除一条自动增长列记录,在下次插入数据时怎么让自动增长接着前面的序号?[/size][/size][/B] 例如:有1 2 3 4 5 条记录,删除5后,下次插入时是5而不是6? 来源: http://www.cxy.me/bbs/announce.asp?boardid=26
这个序列只是一个主键作用,保证数据不重复,连续不连续意义不大吧。
回复
gangma2 2014-03-12
如果说,你每次删除的都是最后一个值,这种情况可以实现,不过麻烦了点,也不是很实用,但能达到那种效果:
select seq_users.currval from dual;当前序列值:

修改序列步长为-1:
Alter Sequence seq_users Increment By -1;
select seq_users.nextvalfrom dual;
select seq_users.currval from dual;
当前的序列值:
在将序列的增长步长修改会来:
Alter Sequence seq_users Increment By 1;
回复
forgetsam 2013-06-11
没有并发自己写触发器,有并发别想什么连号。
回复
sych888 2013-06-09
序列生成后是不可逆转的
回复
Wentasy 2013-06-09
这个是没办法的,下次取Sequence的值肯定是下一个了。
回复
不可能删掉前面的了 后面的每个序列值都要更改 把前面补上? 然后删除序列 重新建一个seq 起始值为最大值+1?
回复
luoyoumou 2013-06-09
如果删除是4呢?(不是当前最大的行号呢?)是不是4也得补上?
回复
搞怪的索引 2013-06-09
当前序列肯定是生成不了 5 了,除非重新创建序列,然后手工产生到4,然后再去用,其实序列主要用作唯一键,你这样用就失去了序列的意义,而只是每次产生一个连续值而已;
回复
相关推荐
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2013-06-09 03:31
社区公告
暂无公告