Rdbms/Database

[Database] 제약 조건

hikr90 2025. 1. 10. 00:06

# 제약 조건

- 테이블 내 잘못된 데이터가 입력되지 않게 막기위한 규칙

- 생성 시 명칭이 따로 지정하지 않으면 오라클에서 임의의 명칭으로 생성한다.

constraints
index
index column
select * from user_constraints
where table_name = '테이블명';
select * from user_indexes
where table_name = '테이블명';
select * from user_ind_columns
where table_name = '테이블명'
;
특정 컬럼의 제약조건 확인
인덱스 확인
어떤 인덱스가 어떤 컬럼에 있는지 확인

(1) primary key

- 테이블 내 대표 컬럼 값임을 나타내는 키 (기본키이자 아이덴티티가 되는 고유 값)

- 중복 값이나 null을 허용하지 않는다.

- 테이블 당 하나의 pk를 필수로 가진다.

- 유니크 인덱스 (중복을 허용하지 않는 인덱스) 가 자동으로 생성된다.

 

(1.1) primary key 생성

쿼리
설명
alter table 테이블명
add constraint 제약조건명 primary key(컬럼);
primary key 제약 조건 생성
alter table test
add constraint test_id_pk primary key(id);
test id 컬럼에 test_id_pk라는 명칭의 pk 생성

(2) foreign key

- 테이블의 컬럼을 참조하는 제약조건

- 타 테이블의 primary key나 unique 제약조건이 있는 컬럼을 참조한다.

- null과 중복 데이터를 허용하나 인덱스는 생성되지 않는다.

(1.1) foreign key 생성

- 참조 관계에 있는 컬럼에 경우, 참조하고있는 컬럼에 존재하지 않는 값으로 수정할 수 없다.

쿼리
설명
alter table 테이블명
add constraint 제약조건명 foreign key(컬럼) references 테이블명(컬럼);
foreign key 제약 조건 생성
create table 테이블명
(
test_no varchar2(10) primary key,
test_nm varchar2(20),
test_cd varchar2(20), foreign key(컬럼)
references 참조하는 테이블명(컬럼)
);
테이블 생성과 동시에 제약 조건 생성

(3) unique

- 중복 데이터를 허용하지 않는 제약조건 (null은 허용한다.)

- 자동으로 유니크 인덱스를 생성한다.

 

(3.1) unique 생성

쿼리
설명
alter table 테이블명
add constraint 제약조건명 unique(컬럼);
unique 제약조건 생성
alter table test
add constraint dept_name_uk unique(dept_name);
test 테이블에 dept_name 컬럼에 unique 제약조건 지정

(4) check

-  특정 조건을 부여하는 제약조건 (제약조건에 위배되지 않는 한에서 입력 및 수정이 가능하다.)

-  null과 중복 데이터를 허용한다.

- 동일 명칭이 아니라면 check 제약조건은 중복으로 생성이 가능하다.

(4.1) check 생성

쿼리
설명
alter table 테이블명
add constraint 제약조건명 check(조건);
check 제약 조건 생성
alter table test
add constraint tst_sal_ch check(sal > 100 and sal < 100000);
연봉 100 ~ 100000인 값만 허용하는 check 제약조건 지정

(5) not null

- null 데이터를 허용하지 않는다. (중복 데이터는 허용)

- not null 제약조건은 생성시 modify를 사용한다.

 

(5.1) not null 생성

쿼리
설명
alter table 테이블명
modify 컬럼명 constraint 제약조건명 not null;
not null 제약 조건 생성

 

제약조건 삭제 

쿼리
설명
alter table 테이블명 drop constraint 제약조건명
테이블의 특정 제약조건 삭제

 

(1) primary key의 삭제

- 삭제되는 경우, unique index가 함께 삭제된다.

 

primary key 삭제
alter table 테이블명 drop primary key;

 

(2)​ foreign의 삭제

- cascade는 foreign key와 상관없이 제약조건을 삭제하는 명령어이다.

쿼리
설명
alter table 테이블명 drop constraint 제약조건명 cascde;
외래키 상관없이 특정 제약조건 삭제

(3) not null 삭제

쿼리 설명
alter table 테이블명 modify 제약조건명;
test table not null 제약조건 삭제

[참고] null 및 중복 값 허용 여부

제약조건
null
중복 값
primary key
X
X
foreign key
O
O
unique
O
X
check
O
O
not null
X
O

 

'Rdbms > Database' 카테고리의 다른 글

[Database] 인덱스  (0) 2025.01.10
[Database] Transaction  (0) 2025.01.10
[Database] 데이터베이스 저장 구조  (0) 2025.01.10
[Database] Grant  (0) 2025.01.10