• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle如何创建自增长主键

mysql 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论

Oracle如何创建自增长主键

Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点:

UUID的优点

1、生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID。

2、适合批量数据中的插入和更新操作。

3、跨服务器数据合并非常方便。

INT自增长的优点

1、占用空间小

2、性能好,UUID跟int比起来不在一个级别上

3、容易记忆

他们各自的优点就是彼此的缺点

推荐 《mysql视频教程》

适用范围:

一般在分布式环境中使用UUID作为唯一主键,至于其他项目本人强烈建议使用int作为主键。

PS:最近我的一个分布式项目在周末访问高峰期也是会出现UUID重复的情况,所以UUID号称的全球唯一ID这个优点我没写上去,而我们可以使用Zookeeper作为主键生成器创建int类型的唯一主键,这是完全没有问题的。

所以综上我还是建议所有的主键都应该使用int类型,在千万级别的数据量上int类型的优点尤为明显。

Oracle创建自增长的步骤:

创建自增长序列

-- 创建自增长序列create sequence seq_on_chance_contractincrement by 1 -- 每次加1start with 1 -- 从1开始计数nomaxvalue -- 不设置最大值nocycle -- 一直累加nocache;

创建数据表

主键可以使用INTEGER和NUMBER,若系统使用Hibernate作为ORM框架则不推荐使用NUMBER

create table TBL_CHAN<div style="color:transparent">本文来源gaodai.ma#com搞##代!^码@网*</div>CE_CONTRACT(  ID                INTEGER  PRIMARY KEY,  CHANCE_SUCCESS_ID VARCHAR2(50) not null,  CONTENT           CLOB,  CREATE_USER_ID    VARCHAR2(50),  CREATA_USER_NAME  VARCHAR2(80),  CREATE_DATE       TIMESTAMP(6))

创建主键触发器,以便新增记录的时候不需要管理ID主键

-- 创建主键触发器  CREATE OR REPLACE TRIGGER tg_on_id_chance_contract        BEFORE INSERT ON TBL_CHANCE_CONTRACT FOR EACH ROW WHEN (new.ID is null)BEGIN       SELECT seq_on_chance_contract.nextval into:new.ID from dual;END;

一些小技巧:

查看所有的序列、表

-- 查找所有SEQUENCE、TABLEselect * from user_objects ubs;-- 查找所有SEQUENCEselect * from user_objects ubs where ubs.OBJECT_TYPE='SEQUENCE';

查看当前序列到了多少

select seq_on_chance_contract.nextval from dual;select seq_on_chance_contract.currval from dual;

重置序列

一般重置序列是需要删除序列然后重建,但是这样比较麻烦,在不删除序列的情况下有以下2中方式:

1、利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。

假设需要修改的序列名seq_on_chance_contract

-- 重置序列select seq_on_chance_contract.nextval from dual;        -- 假设得到结果 nalter sequence seq_on_chance_contract increment by -2;  -- 注意是 -(n-1) select seq_on_chance_contract.nextval from dual;        -- 再查一遍,走一下,重置为1了 alter sequence seq_on_chance_contract increment by 1;   -- 还原

2、利用存储过程实现 (v_seqname)

create or replace procedure seq_reset(v_seqname varchar2) as n number(10); tsql varchar2(100); begin execute immediate 'select '||v_seqname||'.nextval from dual' into n; n:=-(n-1); tsql:='alter sequence '||v_seqname||' increment by '|| n; execute immediate tsql; execute immediate 'select '||v_seqname||'.nextval from dual' into n; tsql:='alter sequence '||v_seqname||' increment by 1'; execute immediate tsql; end seq_reset;

然后调用存储过程:  

exec seq_reset('v_seqname');

本文来自搞代码,mysql教程栏目,欢迎学习!

以上就是Oracle如何创建自增长主键的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle如何创建自增长主键

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址