Oracle怎样建立自增进主键【MySQL教程】,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');
本文来自ki4网,mysql教程栏目,迎接进修!
以上就是Oracle怎样建立自增进主键的细致内容,更多请关注ki4网别的相干文章!