关于Oracle字段自增长问题 客户端工具里面有对SEQUENCE的Reset Next Value菜单的,可以重置 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢jackyoung02(冷雨夜),我去试试!to black_snail(●男人要忍○):那有什么好方法可以保证自增长又具有连续性呢?偶是新手。 可以修改序列,sequence为什么无法保证连续性,楼主去找书看看,书上有比较详细的说明的. 我是在Oracle Enterprise Manager Console里面的,找不到可以将Sequence重设的地方?只有在客户端工具里面有吗? 请问zhaodan5,你用序列和触发器怎么做的自动增长,能否将你实现的方法告诉我,我正好需要用到,你作的已经完全满足我得需要,我是初学者,无法回答您的问题,但能否将你现在实现的方法告诉我,先谢谢了!!! 在sequence的存储表里有一个专门记录当前自动增长的最大顺序号,可以用update 更新即可,存储sequence的表名称我忘了,你找找. sequence 有currval和nextval属性。可以保证按照规律得到唯一的数值。 各位在这里讨论的所谓连续性可以说和sequence无关,因为你们说的连续性只是你个人应用中的连续性,也就是说此连续性只对你自己的具体问题有意义,而对其他的没有意义。具体地说,楼主是想他建的表中某一字段能够保证从1一直增加,不能断,并且中间有删除则需要补上。这种需求是很特殊的。sequence没有实现这种功能。 我用sequence的经验是,不要赋予sequence其他任何意义,其他的由其它的逻辑来实现。因为sequence就是一个序列,你就应该就把它当成一个序列来用。它已经很简单而且功能强大(越用越觉得它的功能强大),将它复杂化只是削弱其功能,增加自己程序的复杂程度。 修改currval的方法:alter sequence sqtest increment by 4 可以负增长 再回到搂主的需求,有点怀疑楼主这样做的必要性,因为,有了断层后,按照楼主的想法,只有在新的数据插入后才会去补这些断层。那么在插入数据之前,数据就保持在有断层的状态。而且,删除数据是无规律的,也就是说,断层是随机的,要补上它,是很麻烦的一件事情,每次插入至少要遍历一次表,代价是比较大的。而这样做的好处似乎只有一个,那就是减小了自增长字段的最大值。不要说保证了表数据的连续性,刚才已经分析过了,根本没有保证表数据的连续性。如果要保证连续性,需要在删除数据的时候进行,而不是在下一次插入新数据的时候才来进行。有点像索引,不过这里是删除,删除一条,将比它大的依次减1。总的来说比较麻烦,代价很高。建议考虑性价比。 谢谢大家!to foxjian(胖子):不好意思,可能我没把问题说清楚。我只是想当清空数据库之后让序列也重新从初值开始而已。我的需求没有一定要保证连续性,当然如果可以会更好的。呵呵!to tigger1974(小老虎) :我这里也说不清,给你个网址,里面有详细介绍的,里面用的时SQL语句的方法,当然你可以用Oracle Enterprise Manager Console 方便的建自增长字段。http://ub1010.51.net/BBS/user_file/2002-04-10/1018438701.htm 判断备份数据库的完整性 关于数据库的几个问题 Oracle8i安装问题 oracle10G的企业管理器界面按钮问题!!!急! oracle里常用命令 怎樣利用datalink和可更新快照進行雙机數据同步一制備份?急救!急救!在線等待!! Help me!请问Oracle中哪里有PL/SQL的详细帮助,象SQL Server中的T-SQL帮助一样的东西? EXECUTE 问题!!!急!在线等待! 数据库服务打不开 linux 下oracle 监听启动不了 高手请回答 在线等待...oracle8i下数据库恢复...谢谢
to black_snail(●男人要忍○):那有什么好方法可以保证自增长又具有连续性呢?
偶是新手。
各位在这里讨论的所谓连续性可以说和sequence无关,因为你们说的连续性只是你个人应用中的连续性,也就是说此连续性只对你自己的具体问题有意义,而对其他的没有意义。具体地说,楼主是想他建的表中某一字段能够保证从1一直增加,不能断,并且中间有删除则需要补上。这种需求是很特殊的。sequence没有实现这种功能。
我用sequence的经验是,不要赋予sequence其他任何意义,其他的由其它的逻辑来实现。因为sequence就是一个序列,你就应该就把它当成一个序列来用。它已经很简单而且功能强大(越用越觉得它的功能强大),将它复杂化只是削弱其功能,增加自己程序的复杂程度。
修改currval的方法:alter sequence sqtest increment by 4 可以负增长
再回到搂主的需求,有点怀疑楼主这样做的必要性,因为,有了断层后,按照楼主的想法,只有在新的数据插入后才会去补这些断层。那么在插入数据之前,数据就保持在有断层的状态。而且,删除数据是无规律的,也就是说,断层是随机的,要补上它,是很麻烦的一件事情,每次插入至少要遍历一次表,代价是比较大的。而这样做的好处似乎只有一个,那就是减小了自增长字段的最大值。不要说保证了表数据的连续性,刚才已经分析过了,根本没有保证表数据的连续性。如果要保证连续性,需要在删除数据的时候进行,而不是在下一次插入新数据的时候才来进行。有点像索引,不过这里是删除,删除一条,将比它大的依次减1。总的来说比较麻烦,代价很高。建议考虑性价比。
to foxjian(胖子):不好意思,可能我没把问题说清楚。我只是想当清空数据库之后让序列也重新从初值开始而已。我的需求没有一定要保证连续性,当然如果可以会更好的。呵呵!
to tigger1974(小老虎) :我这里也说不清,给你个网址,里面有详细介绍的,里面用的时SQL语句的方法,当然你可以用Oracle Enterprise Manager Console 方便的建自增长字段。
http://ub1010.51.net/BBS/user_file/2002-04-10/1018438701.htm