< 테이블 제약조건 >
- 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약
- 제약조건 종류 : Primary Key, Foreign Key, Unique, Not Null, Check
- 제약조건 선언 시기 : 테이블 생성 시(Create table ~) 혹은 테이블 생성 후(Alter table~)에 가능하다.
- 제약조건명
· 사용자 지정으로 고유하고 의미있는 이름 부여하는 것이 좋다
· ex) 테이블약자_컬럼약자_제약조건유형약자
· 사용자가 생략시 Oracle이 자동으로 부여함
① 제약조건 유형
- NOT NULL
· 컬럼안에 NULL이 들어가지 못하도록 설정
· 컬럼레벨 문법만 가능
id number(10) CONSTRAINT emp_id_nn NOT NULL
- UNIQUE
· 중복된 컬럼값을 허용하지 않지만 여러 개의 NULL값은 허용한다
· 고유 인덱스가 생성됨
phonenum varchar2(20) CONSTRAINT emp_phnum_uk UNIQUE
- PRIMARY KEY
· 기본키 제약조건
· NOT NULL + UNIQUE 성격을 가짐
· 테이블에 한번만 선언 가능
id number(10) CONSTRAINT emp_id_pk PRIMARY KEY
- FOREIGN KEY
· 외래키 제약조건
· 자기 자신 테이블이나 다른 테이블의 특정 컬럼(PK, UK)을 참조하는 제약조건
· 참조하는 테이블명 ( 참조하는 컬럼명 ) 필요
// 컬럼레벨 문법
department_id NUMBER(4) CONSTRAINT emp_deptid_fk REFERENCES departments(department)id)
// 테이블레벨 문법
department_id NUMBER(4),
CONSTRAINT emp_deptid_fk FOREIGN KEY (department_id) REFERENCES departments(department)id)
- CHECK
· 컬럼값의 조건이나 범위를 줄 수 있음
· WHERE절 형식과 같다고 생각하면 됨
salary number(10) constraint emp_sal_ck check (salary > 0)
jumin varchar2(13) constraint emp_ju_ck check (length(jumin) = 13)
gender varchar2(10) constraint emp_gen_ck check (gender IN ('남', '여'))
grade number(5) constraint emp_grd_ck check (grade between 1 and 3)
② 컬럼레벨 & 테이블레벨
- 컬럼레벨은 열별로 제약조건 지정
- 가능한 조건 : NOT NULL, PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK
CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_empid_pk PRIMARY KEY,
first_name VARCHAR(20)
);
- 테이블레벨은 컬럼정의와는 별개로 지정
- 가능한 조건 : PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK
- 복합키 지정할 때는 테이블레벨로 지정해야함
CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_empid_pk PRIMARY KEY(EMPLOYEE_ID)
);
'자바 웹 개발자가 될거야 > DB' 카테고리의 다른 글
[Oracle] 테이블 수정하기 / ALTER문 (0) | 2021.12.07 |
---|---|
[Oracle] 테이블 생성하기/ CREAT문 (0) | 2021.12.07 |
[Oracle] 테이블 제약조건 정보 조회 / 쿼리(스크립트) 저장하는 방법 (0) | 2021.12.07 |
[Oracle] UPDATE문 / 트랜잭션 시작 및 종료 / 치환변수 / 쿼리 스크립트 저장 및 불러오기 (0) | 2021.11.26 |
[Oracle] GROUP BY절 / HAVING절 / SQL Developer / JOIN절 (0) | 2021.11.23 |