Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

jeongwon

[Oracle] Primary key, sequence 본문

DataBase

[Oracle] Primary key, sequence

jeongwon_ 2022. 5. 25. 15:12

1. PRIMARY KEY

 

식별자의 가장 중요한 특징은 중복되지 않는다는 점이다. 

 

새로운 내용을 업데이트 할 때, 기존에 같은 식별값이 있는지 알 수 있다면 ?

혹은 중복된 경우 값의 입력이 불가능하다면?

Primary key 가 그 기능을 제공한다. 

 

Primary key 는 필수는 아니지만, 쓰지 않을 이유가 없다. 제한적 기능 외에도, 검색 속도가 매우 빨라지기 때문이다. 

 

※다른 테이블의 Primary key 값을 사용할 때, 개념적으로 이를 가리켜 Foreign key(외래키) 라 한다. 


 

 

Primary key 는 가급적 처음에 지정하는 게 좋다. 데이터가 많아진 다음에는 고려할 사항이 늘어난다.

DROP TABLE topic; --기존 테이블을 삭제했다.

CREATE TABLE topic (	--테이블 새로 생성
	id NUMBER NOT NULL,		
        title VARCHAR2(50) NOT NULL,	
        description VARCHAR2(4000), 
        created DATE NOT NULL,
        CONSTRAINT PK_TOPIC PRIMARY KEY(id) --id 컬럼에 PK_TOPIC이라는 이름의 PRIMARY KEY를 설정.
        );
        
commit;

constraint:제약조건. 이미 존재하지 않는 값만 입력가능.

※ 복합키 : CONSTRAINT PK_TOPIC PRIMARY KEY(id, title)

 


만약 아래와 같이 두 번째 입력 행의 id 값을 중복으로 작성한다면, 에러가 난다.

INSERT INTO topic	--테이블의 열,행 추가
	(id,title,description,created)	
	VALUES
	(1,'ORACLE','ORACLE is...',SYSDATE);	
        
INSERT INTO topic
	(id,title,description,created)	
	VALUES
	(1,'MYSQL','MYSQL is...',SYSDATE);	-- ***ERROR

 


2. SEQUENCE

 

데이터를 추가할 때마다 기존 id값을 피하기 위해 확인해야 한다면 ? 이 일을 데이터베이스가 대신해준다. 

CREATE SEQUENCE SEQ_TOPIC; --SEQ_TOPIC 라는 이름의 시퀀스를 생성

INSERT INTO topic
	(id,title,description,created)
    VALUES
    (SEQ_TOPIC.NEXTVAL, 'MongoDB', 'MongoDB is...', SYSDATE);
-- id가 들어갈 자리에 생성한 시퀀스를 입력.

commit;

모든 데이터를 table 에 입력할 때 위와 같은 형태로 입력하면, 추가할 때마다 자동으로 1씩 id값이 증가해 적용된다. 

 

SELECT SEQ_TOPIC.CURRVAL FROM topic; --현재 시퀀스의 값. (추가한 횟수만큼. 모든 행을 보여줌)
SELECT SEQ_TOPIC.CURRVAL FROM DUAL;--현재 시퀀스의 값. 한 행만 보여줌. DUAL은 일종의 가상 표(특수테이블).

 

 

primary key - 생활코딩

수업소개 행의 식별자인 Primary key를 사용하는 방법을 소개합니다.  강의

opentutorials.org