[DB] 제약조건 5가지(NOT NULL/UNIQUE/PK/FK/CHECK)
@욕심쟁이
·2020. 8. 24. 11:55
반응형
제약조건
- 제약조건의 선언 방식
- Primary key, Foreign key, Unique, Not Null, Check
--컬럼레벨
create table 테이블명(
컬럼명 데이터타입(데이터크기)
constraint 제약조건이름(테이블명_컬럼명_제약조건) 제약조건(PK/fk/notnull...),
[컬럼명 데이터타입(데이터크기)]
);
--(테이블명_컬럼명_제약조건) 예시)emp_emp_id_pk
-- 테이블레벨
create table 테이블명(
컬럼명 데이터타입(데이터크기),
[컬럼명 데이터타입(데이터크기)]
constraint 제약조건이름(테이블명_컬럼명_제약조건) 제약조건(PK/fk/notnull...) (컬럼명)
);
create table 테이블명(
컬럼명1 데이터타입(데이터크기),
컬럼명2 데이터타입(데이터크기)
컬럼명3 데이터타입(데이터크기) not null,
constraint 제약조건이름(테이블명_컬럼명_제약조건) primary key (컬럼명1),
);
--예시
create table emp (
emp_id number(6)
first_name varchar2(20),
job_id varchar2(10) not null,
constraint emp_emp_id_pk primary key (emp_id)
);
1. NOT NULL 제약조건
- 컬럼 레벨의 문법만 가능
- null값을 허용하지않는 제약조건
create table 테이블명(컬럼명 데이터타입(데이터크기) not null);
2. UNIQUE 제약조건
- 중복값을 허용하지 않는 제약조건
create table 테이블명(컬럼명 데이터타입(데이터크기) not null
constraint 유니크이름 unique
);
--OR
create table 테이블명(컬럼명1 데이터타입(데이터크기) not null,
컬럼명2 데이터타입(데이터크기) not null,
constraint 컬럼명1_테이블명_uk unique(컬럼명1)
);
예시)
create table test2(
id number(10) constraint t2_id_nn not null
constraint t2_id_uk unique,
name varchar2(30) constraint t2_name_nn not null,
job varchar2(20),
email varchar2(20),
phone varchar2(20) constraint t2_ph_nn not null
constraint t2_ph_uk unique,
start_date date,
constraint t2_email_uk unique (email)
);
desc test2;
--
--이름 널? 유형
------------ -------- ------------
--ID NOT NULL NUMBER(10)
--NAME NOT NULL VARCHAR2(30)
--JOB VARCHAR2(20)
--EMAIL VARCHAR2(20)
--PHONE NOT NULL VARCHAR2(20)
--START_DATE DATE
3. PRIMARY KEY(기본키) 제약조건
- 기본키 제약조건
- 각 테이블의 대표값
- NOT NULL + UNIQUE의 성격을 가짐
(null값 허용하지않고 중복값 허용하지 않는다.)
create table 테이블명(
컬럼명 데이터타입(데이터크기) not null
constraint PK이름 primary key
);
--OR
create table 테이블명(
컬럼명1 데이터타입(데이터크기) not null,
컬럼명2 데이터타입(데이터크기) not null,
constraint 컬럼명1_테이블명_pk primary key(컬럼명)
);
create table test(
id number(10) constraint t_id_nn not null
constraint t_id_pk primary key,
name varchar2(20),
phone varchar2(20) constraint t_ph_nn not null
);
-- 컬럼 constraint pk명 primary key
OR
create table test(
id number(10) constraint t2_id_nn not null,
name varchar2(20),
phone varchar2(20) constraint t2_ph_nn not null,
constraint t_id_pk primary key(id)
);
--constraint pk명 primary key(컬럼명)
desc test;
--
--이름 널? 유형
------------ -------- ------------
--ID NOT NULL NUMBER(10)
--name VARCHAR2(20)
--PHONE NOT NULL VARCHAR2(20)
4. FOREIGN KEY(외래키) 제약조건
- 자기자신 테이블이나 다른테이블의 특정 컬럼(PK, UK)을 참조하는 제약조건
create table 테이블명(
컬럼명1 데이터타입(데이터크기) not null,
컬럼명2 데이터타입(데이터크기) not null,
constraint 컬럼명1_테이블명_pk foreign key(컬럼명)
references 참조할테이블명(컬럼명)
);
--OR
create table 테이블명(
컬럼명1 데이터타입(데이터크기) not null,
컬럼명2 데이터타입(데이터크기) not null,
constraint 컬럼명1_테이블명_pk (foreign key(컬럼명))--생략가능
references 참조할테이블명(컬럼명)
);
5. CHECK 제약조건
- 특정조건식을 만족하는 식만 제약조건으로 선언
......salary number(2)
constraint emp_salary_min
check(컬럼명 > 0),....
......salary number(2)
constraint emp_salary_min
check(salary > 0),....
※제약조건 조회※
SELECT con.constraint_name, col.column_name ,con.constraint_type,
con.search_condition, con.r_constraint_name
FROM user_constraints con, user_cons_columns col
WHERE con.constraint_name = col.constraint_name
AND con.table_name = '테이블명(대문자)';
※제약조건 끄기※
alter table 테이블명
disable constraint 제약조건명;
※제약조건 켜기※
alter table 테이블명
enable constraint 제약조건명;
반응형
'IT > DB' 카테고리의 다른 글
[DB] ORACLE DATABASE 구조 (0) | 2020.09.04 |
---|---|
[DB]MYSQL(INSERT/UPDATE/DELETE/SELECT)사용하기 (0) | 2020.08.25 |
[DB] 트랜잭션(Transaction)이란? (0) | 2020.08.21 |
[DB] JDBC란?(MySQL 기준) (0) | 2020.08.20 |
[DB] 데이터 조작어(DML) (0) | 2020.08.19 |