학번이나 주민등록번호와 같은 숫자는 식별한다, 구별한다의 기능을 한다.
수많은 데이터를 데이터 저장소에 저장할 때, 우리는 이러한 식별자가 필요하다.
식별자의 가장 중요한 특징은 중복되면 안된다는 것이다.
따라서 중복되는 경우는 실행을 하지 않고 중복 되지 않을 경우만 실행을 하는 기능 필요해진다.
이 기능을 PRIMARY KEY 라고 한다. (=기본키, 주키)
PRIMARY KEY는 테이블을 생성할 때 지정하거나 alter 라는 키워드로 나중에 추가할수도 있는데, 처음 테이블을 생성할 때 지정하는 것이 좋다.
테이블 생성시 CONSTRAINT 키워드로 제약조건을 걸고, PRIMARY KEY로 만들 고유한 식별자 컬럼을 선택한다.
PRIMARY KEY로 지정한 컬럼 안에는 중복되는 값이 들어올 경우 무결성 제약 조건에 위배된다는 에러가 뜨게 된다.
CREATE TABLE topic(
id NUMBER NOT NULL,
title VARCHAR2(50) NOT NULL,
description VARCHAR2(4000) NULL,
created DATE NOT NULL,
CONSTRAINT PK_TOPIC PRIMARY KEY(id)
//제약조건: 이미 존재하지 않는 값만 넣을 수 있다
//PK_TOPIC는 primary key의 이름
//PRIMARY KEY를 걸 컬럼(id)를 적는다
);
PRIMARY KEY 값을 설정하는 것이 필수는 아니지만 값을 설정하면 중복되는 값이 없다는 것을 확신하게 되고, 성능면에서 훨씬 뛰어나게 된다.
PRIMARY KEY를 지정하여 데이터(행)을 추가할때 중복되는 id 값이 없다면 만들어진 행의 id값 중 가장 큰 값에 +1 하여 데이터를 만들게 된다.
ex) id를 primary key로 지정하면 id 값이 1인 데이터 다음엔 2가, 2 다음엔 3이 추가된다.
PRIMARY KEY를 자동으로 1씩 증가시키는 기능을 위해 SEQUENCE를 사용한다.
PRIMARY KEY와 SEQUENCE는 함께 다닌다고 볼 수 있다.
위의 예제의 경우 id 대신 SEQ_TOPIC.NEXTVAL 값을 사용하며
SEQUENCE를 사용하면 값이 충돌날 걱정 없이 데이터를 추가할 수 있다.
CREATE SEQUENCE SEQ_TOPIC;
//이 SEQUENCE는 토픽을 위해 사용한다
INSERT INTO topic
(id,title,description,created)
VALUES
(SEQ_TOPIC.NEXTVAL,'MongoDB','MongoDB is ...', SYSDATE);
//id 대신 SEQ_TOPIC.NEXTVAL 사용
시퀀스의 현재 값을 알고 싶다면?
이 다음에 추가되는 값은 자동적으로 4가 된다.
해당 게시글은 '생활코딩' 님의 오라클 강의를 참고하였습니다.
출처 https://www.youtube.com/playlist?list=PLuHgQVnccGMB5q5uJIDhLlcC2V6tyXhY6
'DATABASE' 카테고리의 다른 글
관계형 데이터 모델링(1) - 개념적 데이터 모델링 (0) | 2021.12.10 |
---|---|
SQL JOIN - LEFT OUTER JOIN, INNER JOIN (0) | 2021.12.10 |
ORACLE DATABASE - 데이터의 CRUD (0) | 2021.12.09 |
ORACLE DATABASE - 사용자 생성하기, 권한 부여하기, 테이블 생성하기 (0) | 2021.12.08 |
DBMS에 대하여 (0) | 2021.12.08 |