>  기사  >  데이터 베이스  >  Oracle에서 자동 증가 기본 키를 생성하는 방법

Oracle에서 자동 증가 기본 키를 생성하는 방법

angryTom
angryTom앞으로
2019-11-27 14:02:512734검색

Oracle에서 자동 증가 기본 키를 생성하는 방법

Oracle이 자체 증가 기본 키를 생성하는 방법

Oracle 기본 키는 일반적으로 UUID와 자체 증가 int라는 두 가지 유형으로 나뉩니다.

UUID의 장점

1. 생성이 용이하며, UUID는 sys_guid()를 통해서든 자바의 uuid를 통해서든 쉽게 생성할 수 있습니다.

2. 배치 데이터의 삽입 및 업데이트 작업에 적합합니다.

3. 서버 간 데이터 병합은 매우 편리합니다.

INT 자체 성장의 장점

1. 작은 공간 차지

2. 성능이 좋고, UUID는 int와 같은 수준이 아닙니다

3. 각각의 장점은 서로의 단점입니다

추천 "

mysql video tutorial

"

적용 범위:

일반적으로 분산 환경에서는 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;

데이터 테이블 생성


시스템이 Hibernate를 ORM 프레임워크로 사용하는 경우 INTEGER 및 NUMBER를 사용할 수 있습니다. 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;

시퀀스 재설정


일반 재설정 시퀀스를 삭제한 다음 다시 작성해야 하지만 이것이 더 번거롭습니다. 시퀀스를 삭제하지 않고 이를 수행하는 방법에는 두 가지가 있습니다.

1 단계 매개변수를 사용합니다. 먼저 시퀀스의 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');

이 문서는 PHP 중국어 웹사이트

에서 가져온 것입니다. mysql tutorial

칼럼, 학습에 오신 것을 환영합니다!

위 내용은 Oracle에서 자동 증가 기본 키를 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제