일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링 게시판 구현
- 스프링 게시판
- 스프링 쇼핑몰 프로젝트
- 스프링 이미지
- 스프링 HikariCP
- 쇼핑몰 포트폴리오
- 스프링 파일 삭제
- 인증번호 전송
- 파일 업로드
- 로그인 기능
- spring 프로젝트
- 삭제 구현
- spring 쇼핑몰
- ResponseEntity
- 스프링 업로드
- 정규표현식
- arraylist
- 쇼핑몰 프로젝트
- 이미지 출력
- 스프링 메일 전송
- 회원가입 기능
- 로그아웃 기능 구현
- 스프링 프로젝트
- 스프링 프로젝트 기본 설정
- 스프링 쇼핑몰
- 스프링 프로젝트 설정
- BCrypt 적용
- Bcrypt
- oracle 설치방법
- 스프링 포트폴리오
- Today
- Total
Kim VamPa
[Oracle 기본사용법][04] PRIMARY KEY(기본키) 본문
"생활코딩 Oracle"을 개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다.
목표
- Primarykey(기본키)가 무엇이고 사용으로 인한 장점에 대해 공부합니다.
- 'SQL Plus'를 이용해서 기본키를 직접 적용시켜봅니다.
*해당 글의 실습은 Oracle XE 버전을 환경을 바탕으로 진행 행하였습니다..
목차
1. 기본키
2. 기본키 적용방법
2.1 생성 시에 추가
2.2 수정을 통한 추가
0. 실습에 사용하는 표(Table)
앞의 글 [02]의 표를 기준으로 하겠습니다.
[표 1]
테이블 이름 : topic
id | title | description | created |
1 | ORACLE | ORACLE is ... | 2020.04.03 |
2 | MySQL | MySQL is .... | 2020.04.03 |
3 | NoSQL | NoSQL is ... | 2020.04.03 |
1. 기본키(PRIMARY KEY)
기본키를 공부하기 앞서 "식별자"와 "키(kEY)"에 대해 먼저 알아보겠습니다.
식별자(Identifier)
어떤 대상을 유일하게 식별 및 구별할 수 있는 이름을 뜻합니다.
키(KEY)
데이터베이스에서 조건에 만족하는 레코드(≒행≒튜플)을 찾거나 순서대로 정렬할 때 다른 레코드들과 구별할 수 있는 유일한 기준이 되는 속성(Attribute)입니다.
- 식별자에 대한 개념에 대한 예를 실생활에서 찾아보면 '주민등록 번호'가 있습니다. 주민등록 번호는 세상에 단 한사람만이 가지고 있는 고유번호입니다. 종종 신원을 확인해야 하는 경우 주민등록번호가 적힌 주민등록증을 통해서 확인하곤 합니다.
두 개념에 대해서 이해했으니 "기본키(Primary Key)"에 대해 알아보겠습니다. 기본키란
기본키(PRIMARY KEY)
관계형 데이터베이스에서 레코드(행)의 식별자로 이용하기에 가장 적합한 것을 관계(테이블)마다 단 한 설계자에 의해 선택, 정의된 *'후보 키'를 말합니다.
*후보 키 : 기본키의 후보가 되는 '키'들
데이터베이스에서 기본키를 사용하는 이유
- 고유키를 설정해주면 잘못된 데이터가 입력 혹은 수정 시에 에러를 내줍니다.
- 고유키를 지정하게 되면 해당 고유키가 지정된 행은 유일무이하다고 확신을 할 수 있습니다.
- SELECT를 통해 검색을 할 때 '기본키'가 지정된 것을 검색할대와 안된 것을 검색할 때의 속도는 매우 큽니다.
정리를 하면 데이터베이스에서 테이블을 만들 때 '기본키(PRIMARY KEY)'를 반드시 설정해야 하는 것은 아닙니다. 하지만 사용했을 때의 장점은 매우 크므로 '기본키'를 설정을 하였다면 매우 경제적인 선택일 것입니다. '기본키'를 설정하는 방법으로는 '테이블을 생성할 때'와 '기존 테이블을 수정'을 통한 두 가지가 있습니다. 하지만 되도록이면 '테이블을 생성할 때' 기본키를 설정하는 것이 좋습니다. 그 이유는 만약 이미 방대한 레코드들을 가지고 있고 기본키로 설정을 하고자 하는 컬럼이 중복되는 것이 있다면 '기본키'는 추가될 수 없기 때문입니다. 적용을 시키기 위해선 일일이 중복되는 것을 제거해주어야 하는데 이는 매우 비효율적입니다.
2. 기본키 설정 방법
2.1 테이블 생성 시에 추가
앞서 포스팅하였던 [Oracle 기반 사용방법][01] 글에서 에서 [1. 테이블 생성하기] 실습에서 테이블을 생성하던 명령어를 기반으로 기본키 추가 방법에 대해서 알아보겠습니다. 다음이 테이블 생성하기에서 실습하였던 명령문입니다.
CREATE TABLE topic(
id NUMBER NOT NULL,
title VARCHAR2(50) NOT NULL,
description VARCHAR(4000),
created DATE NOT NULL
);
테이블 생성 시 기본기를 추가하는 방법은 모든 컬럼을 정의한 후 마지막 문장에서 기본키를 정의하는 방법[방법 1]과 컬럼을 정의할 때 바로 그 옆에 기본키를 정의하는 방법[방법 2]이 있습니다.
방법1
기본키를 설정하기 위해선 기존 마지막 명령문(created DATE NOT NULL)에서 기본키를 설정해주는 명령문을 추가해주면 됩니다.
CREATE TABLE topic(
id NUMBER NOT NULL,
title VARCHAR2(50) NOT NULL,
description VARCHAR(4000),
created DATE NOT NULL,
CONSTRAINT PK_TOPIC PRIMARY KEY(id)
);
- "PK_TOPIC" 설정되는 기본키의 이름입니다.
- KEY()의 괄호 안에 들어가는 것은 기본키로 설정될 컬럼의 이름입니다.
실습
기존에 테이블이 만들어져 있기 때문에 삭제(DROP TABLE topic;)[그림2-1]를 한 후 진행[그림 2-2]하겠습니다.
- "테이블이 생성되었습니다"라는 문구가 뜨면 정상적으로 테이블이 생성되었습니다.
방법2
기본키 설정 대상이 되는 컬럼을 정의할 때 그옆에 "PRIMARY KEY" 문장을 추가해주는 방법입니다.
CREATE TABLE topic (
id NUMBER PRIMARY KEY,
title VARCHAR2(50) NOT NULL,
description VARCHAR2(4000),
created DATE NOT NULL
);
실습
기존에 같은 이름의 테이블이 있으시다면 (DROP TABLE 테이블명;)을 통해 테이블 생성 명령을 사용하시면 됩니다.
2.2 테이블 수정을 통한 추가
ALTER TABLE 테이블명 ADD PRIMARY KEY (대상칼럼);
- 해당 명령은 기존에 테이블이 이미 만들어져 있는 상태에서 칼럼에 '기본키'속성을 추가하는 방법입니다.
실습
topic 테이블(표1)만들어져 있는 상태에서 '기본키'속성을 부여합니다.
ALTER TABLE 테이블명 ADD PRIMARY KEY (id)
1. 앞서 실습을 위해 만든 topic 테이블이 존재한다면 삭제합니다.
[DROP TABLE topic;]
2. 표 1을 만듭니다.(기본키가 설정되지 않은 명령문입니다.)
[CREATE TABLE topic(
id NUMBER NOT NULL,
title vARCHAR2(50) NOT NULL,
description VARCHAR(4000),
created DATE NOT NULL
);]
3. id칼럼에 기본키 속성을 추가해주는 명령문을 실행시켜줍니다.
Reference
Date
- 2020.04.07 작성
'공부 > 데이터베이스' 카테고리의 다른 글
[Oracle 기본사용법][06]오라클에서의 서버(Server)와 클리아언트(client)란? (0) | 2020.04.09 |
---|---|
[Oracle 기본사용법][05]시퀀스(SEQUENCE) (0) | 2020.04.08 |
[Oracle 기본사용법][03] SELECT(WHERE,ORDER BY, OFFSET, FETCH) (0) | 2020.04.05 |
[Oracle 기본사용법][02] CREATE(테이블 생성),INSERT(데이터 삽입) (0) | 2020.04.04 |
[Oracle 기본사용법][01]사용자(USER)생성, 스키마(SCHEMA) 생성 (0) | 2020.04.03 |