제약조건이란?
데이터의 무결성을 지키기 위한 제한된 조건.
특정 데이터를 입력 할 때 무조건 입력되는 것이 아닌, 지정한 조건을 만족했을 때 입력되도록 제약한다.
종류: Primary key, Foreign key, Unique, Not Null, Check
제약조건 선언 시기
1) 데이블 생성 시: create구문으로 테이블 선언 시.
2) 테이블 생성 후: alter 구문으로 수정한다.
제약조건명
사용자(개발자)가 지정. 고유하고 의미있는 이름 부여.
권장 이름: 테이블명의 약자_컬럼명 약자_제약조건 유형의약자
ex) emp_empid_pk
emp_email_uk
dept_dname_nn
dept_sal_f => 한글자씩으로만 줄여써도된다. 잘 알아볼 수 있도록 편리하게!
제약조건명은 생략할수 있다. 생략을 하면 sys_cㅁㅁㅁㅁㅁ 패턴으로 자동부여되는데,
나중에 제약조건이 안맞아서 에러 표시가 날때 sys_c000333 이런식으로 떠서 알기가 힘들다.
따라서 제약조건 할시 귀찮더라도 제약조건명을 부여하는것을 권장한다.
제약조건 종류
1. Primary key
기본키 제약조건
not null + unique 성격을 모두 가진 제약조건 = null값, 중복값이 들어갈 수 없다.
테이블 당 한번만 선언 가능.
2. Foreign key
외래키 제약조건
자기 자신 테이블이나 다른 테이블에 있는 특정 컬럼을 참조하는 제약조건.
이 제약조건에 이해 테이블들이 서로 연결되어 운영된다.
주의!! 참조하는 테이블의 컬럼은 PK, UK중에 하나는 무조건 설정되있어야 참조될 수 있다.
제약조건 선언시 => column level 문법 - Foreign key 키워드 생략 가능.
table level 문법 - Foreign key 키워드 생략 불가.
3. Unique
중복값이 아닌, 고유한 값만 들어갈 수 있다.
4. Not Null
null값이 들어갈 수 없음. 주로 필수 입력조건에 사용한다.
테이블 레벨의 문법으로 제약조건을 지정할 수 없다.
5. Check
해당 컬럼이 만족해야하는 조건문을 지정하는 제약조건. (사용자가 자유자제로 조건 걸기!)
column level 문법과 table level 문법이 같다.
ex)
컬럼 레벨: salary number(10) constraint 제약조건명 check (salary > 0)
테이블 레벨: constraint 제약조건명 check (salary > 0)
ex)
컬럼 레벨: 주민번호 varchar2(13) constraint 제약조건명 check (length(주민번호) = 13)
테이블 레벨: constraint 제약조건명 check (length(주민번호) = 13)
ex)
컬럼 레벨: gender varchar2(10) constraint 제약조건명 check (gender in ('남','여'))
테이블 레벨: constraint 제약조건명 check (gender in ('남','여'))
제약조건 선언 방법
1) 컬럼 레벨 문법(column-level)
컬럼명 데이터타입 CONSTRAINT 제약조건명 제약조건
create table employee {
employee_id number(6) CONSTRAINT emp_empid_pk PRIMARY KEY,
first_name varchar(20),
...
}
--제약조건 생략시
create table employee {
employee_id number(6) PRIMARY KEY,
}
2) 테이블 레벨 문법(table-level)
** NOT NULL 제약조건은 테이블 레벨의 문법을 사용할 수 없다.
CONSTRAINT 제약조건명 제약조건 (컬럼명)
create table employee (
employee_id number(6),
first_name varchar(20),
...
CONSTRAINT emp_empid_pk PRIMARY KEY (employee_id)
)
--제약조건 생략시
create table employee (
employee_id number(6),
first_name varchar(20),
...
PRIMARY KEY (employee_id)
)
제약조건 Foreign Key 선언방법
1) 컬럼 레벨의 문법
이 방식은 references 키워드만봐도 외래키 인걸 아니까 foreign key 키워드를 생략할 수 있다.
CREATE table employee(
dept_id number(4) constraint emp_deptid_fk REFERENCES departments(dept_id),
...
);
2) 테이블 레벨의 문법.
테이블 레벨은 어떤 컬럼명인지를 적어야해서 foreign key 키워드를 생략할 수 없다.
CREATE table employee(
dept_id number(4),
...
constraint emp_deptid_fk FOREIGN KEY (dept_id) REFERENCES departments(dept_id),
);
제약조건 확인
https://luanaeun.tistory.com/175
'Database > Oracle' 카테고리의 다른 글
Oracle DB) DDL - ALTER 테이블 수정(add, rename, modify, drop) (0) | 2022.03.22 |
---|---|
Oracle DB) 제약 조건 확인하기(SQLPlus, Developer) (0) | 2022.03.22 |
Oracle DB) 데이터 정의어(DDL) - CREATE 테이블 생성, 복사 (0) | 2022.03.15 |
Oracle DB) 단일행 함수 - 문자함수(자르기, 연결하기 등등) (0) | 2022.03.02 |
Oracle DB) SELECT 연습 (0) | 2022.03.02 |