[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