请教:如何实现Oracle主键自增

问题描述

请问:如何实现Oracle主键自增(网络上有很多例子,很简单),但是我的问题是:如果id为1,2,...10,13,14,...50。(其中id=11,12)被删除了。oracle自增的时候会先用11,12,再用51,52,...吗?谢谢!

解决方案

解决方案二:
不会,谢谢!直接用51,52...往下。
解决方案三:
不会那样,直接51,52,..
解决方案四:
主键应作为一个唯一标识符,并不需要具有业务含义,这才是正道!所以,主键只要唯一,不管当中跳了多少个都是没有问题的。
解决方案五:
主键好比身份证号码,并不会因为一个人的去世,而重编所有人身份证号码的道理一样。
解决方案六:
引用4楼bao110908的回复:

主键好比身份证号码,并不会因为一个人的去世,而重编所有人身份证号码的道理一样。

果果不要用身份证号码来比较,因为天朝的身份证号码曾经从15位变到18位,而作为主键,一般是不能这么变的。主键最好是只读的与业务无关的。
解决方案七:
打个比方嘛,呵呵。15位升18位好比就是从一个Schema导到另一个Schema中去,主键重编,哈哈。
解决方案八:
引用6楼bao110908的回复:

打个比方嘛,呵呵。15位升18位好比就是从一个Schema导到另一个Schema中去,主键重编,哈哈。

哈哈,也是哈。
解决方案:
主键使用中还需要考虑一点:如果今后有可能进行多库多表数据合并,为了避免数据表合并后的主键冲突,那么这些表的主键就不能使用独立的Sequence产生,应改为UUID或者有可能合并的表采用同一个Sequence产生主键,以保证全局唯一性,
解决方案:
产生下一个主键,数据库首先获取最大的主键值,然后+1,所以应用程序在使用自增主键的时候,一方面可能也会长生冲突,另外一个方面速度比较慢,选择uuid一般可以避免上述问题。
解决方案:
哇。真热闹,进来看看,学习了。

时间: 2024-12-29 04:46:47

请教:如何实现Oracle主键自增的相关文章

oracle主键自增及存储过程的实现

要用到触发器: drop sequence users_tb_seq; create sequence users_tb_seq minvalue 1 maxvalue 99999 increment by 1 start with 1; create or replace trigger users_tb_tri before insert on users for each row begin select users_tb_seq.nextval into :new.user_id fro

ssh框架中如何为oracle中对应的表创建hibernate序列,以达到新加主键自增的功能

问题描述 ssh框架中如何为oracle中对应的表创建hibernate序列,以达到新加主键自增的功能 解决方案 .hbm 文件 <id name="id" type="java.lang.String"> <column name="ID" length="32" /> <generator class="uuid.hex" /> </id>策略不一样<

oracle-刚学的spingmvc 想使用hibernate添加数据实现主键自增?求指点

问题描述 刚学的spingmvc 想使用hibernate添加数据实现主键自增?求指点 <bean id=""dataSource"" class=""org.springframework.jdbc.datasource.DriverManagerDataSource""> <property name=""driverClassName"" value="

oracle主键的设置方法

 主键: 1.主键约束: 一个表只能有一个主键约束.主键可以是单个字段,也可以是多个字段.无论是哪种情况,其所有字段都是NOT NULL. 2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL. 3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束:主键所有字段都是not null,unique可以是 null:相同点在于都能保证唯一性. 4.主键.Unique与索引:主键约束与Unique约束默认会成为索引.当主键和Un

EF 自关联表主键自增情况下,不能添加记录的问题,有谁解决过?

问题描述 EF 自关联表主键自增情况下,不能添加记录的问题,有谁解决过? 如题,我的系统中因为一个特定原因,需要一张自关联表(thisTable)来简化逻辑, 该表主键是自增的,结果发现无法添加记录, 错误消息:无法确定"db.thisTable"关系的主体端.添加的多个实体可能主键相同. 请问,有人解决过这个问题吗? 解决方案 自己解决了,顺便分享给大家: 在EF的设定里,自关联的表主键外键,都不能为空(为空就会破坏数据的完整性), 这在两表关联时没问题,但在自关联就有一个悖论,那就

mybatis+mysql 一表主键自增, 插入数据,怎么返回主键

问题描述 mybatis+mysql 一表主键自增, 插入数据,怎么返回主键 mybatis+mysql 一表主键自增, 插入数据,怎么返回主键.很多人说的都是返回了插入的行数 解决方案 <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id"> insert into person(name,pswd)

主键自增-数据库如何实现某主键以另一自增主键id为前缀自增

问题描述 数据库如何实现某主键以另一自增主键id为前缀自增 比如说,建立比赛和队伍两个表,想让队伍id在这个队伍参加的比赛的id前实现自增.有什么办法?顺便问一下,数据库操作入门有什么好的推荐吗?只掌握基础的增删改查-T-T希望大家帮我一下,谢谢大家 解决方案 你查询的时候, select (队伍id + 比赛id) as 编号 from 表 解决方案二: 如果这样,没有必要写在数据库中,增加数据冗余,只要查询的时候拼接就可以了. 解决方案三: 关于资料,自己google下有很多,关键是没有说你

深入Mysql,SqlServer,Oracle主键自动增长的设置详解_Mysql

1.把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: 复制代码 代码如下: create table customers(id int auto_increment primary key not null, name varchar(15));insert into customers(name) values("name1"),("name2");select id fr

三步添加oracle主键自增长

第一步 CREATE SEQUENCE seq_表名称 INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 NOCACHE -- 不建缓冲区 第二步 CREATE TRIGGER "tiger_表名称" BEFORE INSERT ON 表名称 FOR EACH ROW WHEN (new.自增字段 is null) begin select seq_表名称.ne