일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JS
- 도커
- Spring
- Spring Cloud
- docker
- STS
- 스프링부트
- IntelliJ
- 유레카
- 스프링
- 비동기
- spring boot
- date
- jQuery
- leetcode
- 코딩테스트
- OAuth
- 자바
- gitlab
- SpringBoot
- spring security
- 스프링 클라우드
- GIT
- JavaScript
- map
- EUREKA
- map()
- 프로그래머스
- Java
- 자바스크립트
- Today
- Total
RATSENO
[ORACLE]제약조건 본문
제약조건
제약조건(Constraints)은 컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나
데이터 무결성을 보장하기 위한 용도로 사용된다.
-NOT NULL, UNIQUE, 기본키, 외래키, CHECK
①NOT NULL
컬럼명 데이터타입 NOT NULL
컬럼을 정의할 때 NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야 한다.
즉 반드시 값이 들어 있어야 하는 컬럼에는 NOT NULL 제약조건을 만들어 사용한다.
ex)
CREATE TABLE ex1(
COL_NULL VARCHAR2(10),
COL_NOT_NULL VARCHAR2(10) NOT NULL
);
②UNIQUE
컬럼명 데이터타입 UNIQUE
또는
CONSTRAINTS 제약조건명 UNIQUE(컬럼명1, 컬럼명2,.....)
UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다.
즉 중복 값을 허용하지 않는다.
UNIQUE와 NOT NULL을 같이 명시하면 해당 컬럼에 들어오는 값은 유일함은 물론 반드시 입력해야 한다. 또한
NULL 허용 컬럼에도 UNIQUE 제약조건을 붙일 수 있다.
ex)
CREATE TABLE ex2(
COL_UNIQUE_NULL VARCHAR2(10) UNIQUE,
COL_UNIQUE_NNULL VARCHAR2(10) UNIQUE NOT NULL,
COL_UNIQUE VARCHAR2(10),
CONSTRAINTS unique_nm1 UNIQUE(COL_UNIQUE)
);
UNIQUE 비교 대상에서 NULL은 제외된다.
③기본키(Primary Key)
보통 테이블에 키를 생성했다라고 할 때, 이는 기본키를 의미한다.
기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.
컬럼명 데이터타입 PRIMARY KEY
또는
CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명, ...)
오라클을 비롯한 여러 DBMS는 데이터 무결성을 보장하고 있는데,
데이터 무결성이란 데이터의 정확성과 일관성을 유지한다는 뜻이다.
간단히 말하자면 >
테이블상에서 특정 데이터를 뽑아낼 수 있는 유일하면서(중복이 안되면서) NOT NULL인 것이라고 생각하면 될듯하다.
기본키는 여러 컬럼을 하나의 기본키로 만들 수도 있다.
이 경우에는 CONSTRAINT 키워드를 사용해서 생성해야 된다.
또한 여러 컬럼을 조합하여 만든 기본키는 유일(UNIQUE)해야 하고, 그 컬럼들에 NULL은 들어갈 수 없다.
ex) 학급 테이블
번호 |
이름 |
전화번호 |
1 |
홍길동 |
01011112222 |
2 |
김철수 |
01033334444 |
3 |
김영희 |
01055556666 |
기본키(1개의 컬럼) - 번호
번호 | 이름 | 전화번호 |
1 | 홍길동 | 01011112222 |
2 | 김철수 | 01033334444 |
3 | 김영희 | 01055556666 |
기본키(2개의 컬럼) - 번호 , 전화번호
CONSTRAINT 외래키명 FOREIGN KEY(컬럼명,...)
REFERENCES 참조 테이블(참조 테이블 컬럼명,....)
반 정보 테이블
반 |
선생님 |
1 |
A씨 |
2 |
B씨 |
3 |
C씨 |
학생 정보 테이블
번호 |
이름 |
반 |
1 |
홍길동 |
1 |
2 |
김철수 |
2 |
3 |
김영희 |
4 |
학생 정보 테이블에는 반 컬럼이 있고, 반에 대한 정보는 반 정보 테이블에 있다.
만약 전학생이 전학을 와서 학생 정보 테이블에 데이터를 입력하는 와중에 반 정보 테이블에 없는
반(예를 들어 4반, 5반)을 입력한다면 어떻게 될까? 논리적으로 합당하지 않으며 이 전학생이 들어간 반에 대한
반 정보를 제대로 찾을 수 없다. 즉 참조 무결성이 깨진다.
하지만 외래키를 생성해 놓으면 반 정보에 없는 반을 입력할 때 오라클은 오류를 발생시켜 잘못된 데이터가 입력되는 것을
방지한다. 참조 무결성을 보장하는 것이다.
외래키에 대한 제약사항은 다음과 같다.
- 반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.
- 외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
- 여러 컬럼을 외래키로 만들려면, 참조하는 외래키 컬럼의 순서와 개수는 같아야 한다.
'DEV > SQL' 카테고리의 다른 글
[MySQL]MySQL 연산자 - LIKE 연산자 (0) | 2018.10.11 |
---|---|
[MySQL]리터럴 표기법 - 날짜 (0) | 2018.10.11 |
[MySQL]리터럴 표기법 - 숫자 (0) | 2018.10.11 |
[ORACLE]INSERT ~ SELECT 형태 (0) | 2018.01.22 |