大神求助!现有大量数据的列(PK_ID)排序断开了,如何新增数据时继续排序

dabao2266 2019-10-09 11:31:36
...全文
65 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40290083 2019-10-10
  • 打赏
  • 举报
回复
引用 4 楼 dabao2266 的回复:
序列的初始值等于现有最大值+1,每次自增1,这种怎么写?会不会把原来的数据重新排序?
oracle在数据的存储时不是按照你插入的顺序依次写入文件的,即使你只做插入数据,也不一定按照顺序写入数据块的(你可以试验下,他创建一个简单表,然后ID定义为主键(主键默认是有索引的),然后插入一些数据,再查询,查询时不要加order by,你看到的顺序不一定是你插入的顺序)。 数据是否排序,按什么来排序。是由你的select语句来控制的 create sequence student_id 2 minvalue 1 --最小值 3 nomaxvalue --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue 4 maxvalue 999 -- 最大值 5 start with 1 --从1开始计数,数值可变 6 increment by 1 --每次加1,数值可变 7 nocycle --一直累加,不循环;cycle:达到最大值后,将从头开始累加 8 nocache; --不建缓冲区。 如果建立cache那么系统将自动读取cache值个seq,这样会加快运行速度;如果在单机中使用cache,或者oracle死了,那么下次读取的seq值将不连贯,所以不建议使用cache。
dabao2266 2019-10-10
  • 打赏
  • 举报
回复
序列的初始值等于现有最大值+1,每次自增1,这种怎么写?会不会把原来的数据重新排序?
nayi_224 2019-10-10
  • 打赏
  • 举报
回复
原则上说,主键应该不参与任何逻辑,而只是作为唯一标识存在。 你是想实现什么样的效果?
stelf 2019-10-09
  • 打赏
  • 举报
回复
你说的继续排序是按照现有的ID,把缺失的补全?那应该是不太可能的了
weixin_40290083 2019-10-09
  • 打赏
  • 举报
回复
不知道你的这个PK_ID是如何生成的,在oracle即使使用序列,如果不删除数据可以何证ID是连续的,但是当有数据删除时,序列就会断续,而且被删除的的ID值,序列是不会发现也不会回收使用的。 如果你是在应用程序中计算PK_ID,那么可以查到最大的ID值,然后加1,要考虑并发时ID重复问题,需要锁表,锁表影响数据库性能。 建议使用序列,序列的初始值等于现有最大值+1,每次自增1
AHUA1001 2019-10-09
  • 打赏
  • 举报
回复
用序列,或者现有数据最大值加一。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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