当前位置:首页 > MySQL教程 > 正文内容

Oracle怎样建立自增进主键【MySQL教程】,Oracle,自增长,主键

搜教程4年前 (2019-12-02)MySQL教程187

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网别的相干文章!

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/16291.html

分享给朋友:

“Oracle怎样建立自增进主键【MySQL教程】,Oracle,自增长,主键” 的相关文章

MySQL慢查询日记的设置以及运用教程详解【MySQL教程】,MySQL,以及,配置

MySQL慢查询日记的设置以及运用教程详解【MySQL教程】,MySQL,以及,配置

慢查询日记用于纪录一些过慢的查询语句,能够协助管理员剖析问题所在,下面这篇文章重要给人人引见了关于MySQL慢查询日记的设置与运用教程,文中经由过程示例代码引见的异常细致,须要的朋侪能够参考下。 媒介 MySQL慢查询日记是我们在一样平常事情中经常会碰到的一个功用,MySQL慢查询日记供应了...

mysql中update与insert经常使用详解【MySQL教程】,update,insert,mysql

mysql中update与insert经常使用详解【MySQL教程】,update,insert,mysql

本文主要内容: update更新,batch批量更新 insert 数据到表中,将表中数据插进去到另一个表中 insert ignore疏忽反复数据插进去报错题目 update更新,batch批量更新 set sql_safe_updates=0;# 通例updateup...

MySQL高可用解决方案MMM详解【MySQL教程】,MySQL,解决方案,详解

MySQL高可用解决方案MMM详解【MySQL教程】,MySQL,解决方案,详解

MySQL自身没有供应replication failover的解决计划,经由过程MMM计划能完成效劳器的毛病转移,从而完成mysql的高可用。MMM不仅能供应浮动IP的功用,假如当前的主效劳器挂掉后,会将你后端的从效劳器自动转向新的主效劳器举行同步复制,不必手工变动同步设置 一、MMM简介:...

数据库纪录删除体式格局 有哪些【MySQL教程】,数据库,哪些,方式

数据库纪录删除体式格局 有哪些【MySQL教程】,数据库,哪些,方式

弁言 删除数据库纪录是一个异常罕见的需求,当数据落空代价时,我们便会删除它,然则假如操纵不当,每每就会把一些有代价的数据误删掉,形成重要数据的丧失,合理采纳删除体式格局才更好地运用数据资本,下面引见几种经常运用的删除体式格局。 删除体式格局 物理删除 物理删除就是直接从数据库中删除一...

mysql索引不见效的解决方法【MySQL教程】,mysql,方法,解决

公司效劳用的mysql,最近在查询时时候很慢,常常会上10多秒,查看了一下查询的实行计划,发明索引没有见效。 存储引擎运用InnoDB。 一最先在主库查询,一向很猎奇为何索引不见效,切换到备库以后,发明备库是有用的。 最先斟酌是否是由于索引出问题,后对索引重修,发明效力高了不少。 简...

Mysql的编译装置以及简朴引见【MySQL教程】,Mysql,简单,以及

Mysql的编译装置以及简朴引见【MySQL教程】,Mysql,简单,以及

==========MYSQL事情原理图: 1》数据库简介:简朴的说数据库(database)就是一个存储数据的堆栈,它将数据根据特定的规律存储到磁盘上,经由过程数据库治理体系,能够有用的治理存储在数据库中 的数据; SQL言语: DBMS是经由过程SQL言语来举行数据库治理的。SQL言...