# 제약 조건
- 테이블 내 잘못된 데이터가 입력되지 않게 막기위한 규칙
- 생성 시 명칭이 따로 지정하지 않으면 오라클에서 임의의 명칭으로 생성한다.
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 |