Oracle怎样新建自增长主键
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怎样新建自增长主键的细致内容,更多请关注 百分百源码网 其它相干文章!