jeongwon
[Oracle] Primary key, sequence 본문
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
'DataBase' 카테고리의 다른 글
[데이터 모델링] 논리적 데이터 모델링 (0) | 2022.05.27 |
---|---|
[데이터 모델링] 개요, 개념적 데이터모델링 (0) | 2022.05.27 |
[Oracle] SQL SELECT 문의 활용 - JOIN (0) | 2022.05.26 |
[Oracle] 서버&클라이언트, SQL Developer, 스키마 (0) | 2022.05.25 |
[Oracle] SQL, 데이터 Create, Read, Update, Delete (0) | 2022.05.25 |