百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Oracle怎样新建自增长主键
分享文章到:

Oracle怎样新建自增长主键

发布时间:09/01 来源:未知 浏览: 关键词:
Oracle主键常用的分为UUID和自增长int两种,UUID生成利便,适合大量插入数据和更新操纵,int占用空间小,机能好,容易记忆;个别在散布式环境中运用UUID作为独一主键,至于其他项目倡议运用int作为主键。

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_contract
increment by 1 -- 每次加1
start with 1 -- 从1开端计数
nomaxvalue -- 不设定最大值
nocycle -- 不断累加
nocache;

新建数据表

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

create table TBL_CHANCE_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、TABLE
select * from user_objects ubs;
-- 查寻所有SEQUENCE
select * 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;        -- 假如得到效果 n
alter 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怎样新建自增长主键的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板