社区
基础和管理
帖子详情
如何保证oracle自增主键的连续性?
eyoexply
2004-07-22 12:53:10
用序列后,可以自增,但是一旦删除记录后,就不能保证主键连续性了
要怎么做才能达到连续性呢?
...全文
389
16
打赏
收藏
如何保证oracle自增主键的连续性?
用序列后,可以自增,但是一旦删除记录后,就不能保证主键连续性了 要怎么做才能达到连续性呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mqmmx
2005-01-12
打赏
举报
回复
对了要保证表dual只有一条记录
mqmmx
2005-01-12
打赏
举报
回复
用语句查询下一个可用的空号不就行了,不要用序列,序列用在事务里当事务回滚里也会跳号的。
如你的表(XX)里有字段SNo为你要的主键(长度为8)要让每次生成的记录号连续可以用下面的语句。试试
SELECT SUBSTR(MIN(A.SNo)+100000001,2) SNo FROM (SELECT '00000000' SNo FROM DUAL
Union All SELECT SNo FROM XX) A WHERE NOT EXISTS( SELECT 'X' FROM XX WHERE SNo=substr(A.SNo+100000001,2))
nebulaly
2005-01-12
打赏
举报
回复
用rownum让前台看起来是连续的算了
jiangx123
2005-01-12
打赏
举报
回复
搞什么啊,会计号即使是用掉也是存在的,就是声明作废,绝对不允许使用已用过的号码
怎么能自动自动填充上来?
lveyo
2005-01-12
打赏
举报
回复
要用触发器了
gucs
2004-07-25
打赏
举报
回复
to: tyrone98(林林)
谢谢你的答复。
从业务角度讲,如果出现会计传票号被取消或删除的情况,怎么处理呢?后面的单子自动填充被删除的吗?
在csdn见过几次类似的问题,一直不明白为什么有这方面的要求。
WilliamXiaoLiang
2004-07-24
打赏
举报
回复
顶一下!
QQ:390958177
Email:xiaol@chinaebiz.biz
tyrone98
2004-07-24
打赏
举报
回复
gcs925(改变[1995]) ,有些应用必须这样,象银行的会计传票号就不能有跳号,发票编号都不允许有跳号的情况产生。这种应用下,只能使用新增表来做这种应用
gucs
2004-07-24
打赏
举报
回复
请问,使序列连续有什么作用,谢谢
LGQDUCKY
2004-07-22
打赏
举报
回复
如果使用序列就没有办法实现,只能通过别的方法来实现
David1289
2004-07-22
打赏
举报
回复
在另外一个表中来完成记录增量,不要用序列,一些ERP中就是这样来实现的
magicnbh
2004-07-22
打赏
举报
回复
使用max(id)+1,就可以了,不过这种方法在字段多了以后耗资源,不可取!
fim
2004-07-22
打赏
举报
回复
不用序列可以实现
删除前取出字段的序号,如8,然后再删除
update table set 字段一 = 字段一 -1 where 字段一 > 8
freddy2003
2004-07-22
打赏
举报
回复
跳号肯定是不可避免的
如果你第一次是1,2,3,4,5,6,7,8,9
如果你第二次是把1,2,3,4删除
如果你第三次是10,12,13,
你能保证第二次删除瓣1,2,3,4不跳号吗?
其实我自已以前也是试着用触发器来实现,最后都是失败了
dinya2003
2004-07-22
打赏
举报
回复
oracle中建序列的时候有个参数cache ,如果后面的数字是10,cache 10,系统可以将序列的下十个放到缓存中,加快处理速度,如果此时down机,系统将丢弃没使用的部分,导致跳号.如果将cache 设置为0,或nocache 系统将不把序列的值放到缓存中,这样可以避免跳号.此方法未经测试.
freddy2003
2004-07-22
打赏
举报
回复
你没有必要保证主键连续性。就像SQL Server中一样。
39 |
自增
主键
为什么不是连续的?
MySQL45讲 实践篇 39 |
自增
主键
为什么不是连续的? CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c` (`c`) ) ENGINE=InnoDB;
自增
值保存在哪儿? 在 t 里面执行 insert into t values(null,
oracle
实现
主键
id
自增
简介
Oracle
Database,又名
Oracle
RDBMS,或简称
Oracle
。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说
Oracle
数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。问题之前在做项目的时候,使用的数据库是
Oracle
...
MySQL
自增
主键
有什么作用?来自大厂的使用经验
下面分别看下这两个问题。
ORACLE
+MYBATIS插入数据返回
自增
主键
id
在mysql数据库中,因为表的字段可以设置为
自增
,因此很容易实现插入一条记录的同时返回
自增
的
主键
id。但是在
oracle
中,并不支持
主键
自增
,而是需要创建表的
自增
序列,不仅如此,还需要在mybatis中如下设置。 创建表的
自增
序列 create sequence 序列名称 minvalue 1 maxvalue 99999999 start with 1 increment by 1 cache 20; 其中的cache是指缓存的数量,默认为20,一次性先加载连续的20个id到缓存中,每次新增先从缓存
自增
主键
id值不连续问题及参考
在 MySQL 5.7 及之前的版本,
自增
值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找
自增
值的最大值 max(id),然后将 max(id)+1 作为这个表当前的
自增
值。 在 MySQL 8.0 版本,将
自增
值的变更记录在了 redo log 中,重启的时候依靠 redo log 恢复重启之前的值
基础和管理
17,377
社区成员
95,128
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章