위로
아래
제약조건
CONSTRAINT(제약조건)
테이블의 컬럼에 조건을 정해주는 것
제약조건의 특징
- 사용자에 의해 발생한 잘못된 DML이 실행되지 않는다
- 제약 조건에 대한 모든 정보가 자료사전에 저장된다
- 원할 때는 언제든지 기능을 비활성화 할 수 있고 또한 활성화 할 수 있다
- 처리결과가 즉시 사용자에게 보여진다.
- 하나의 컬럼에 여러 개의 제약조건을 설정할 수 있다.(column-level과 table-levle)
- 여러 개의 컬럼으로 하나의 제약 조건을 설정할 수 있다.
- 제약 조건의 관리는 서버가 담당
- TABLE에 행(레코드) 삽입, 수정, 삭제시 Constraint를 검사
- TABLE 생성시 constraint가 생략되어도 생성가능
- 다른 테이블과 종속관계있다면 테이블 삭제를 방지
- 컬럼 레벨과 테이블 레벨에서 정의가 가능
제약조건의 종류
- PRIMARY KEY : TABLE내에서 각 Row를 식별할 수 있는 유일한 값, 식별키(기본키)
- FOREIGN KEY : 참조된 테이블과의 관계를 적용하는 컬럼, 외래키
- UNIQUE KEY : 컬럼내에서 유일한 값(NULL값 허용)
- NOT NULL : 참조된 TABLE과의 관계를 적용하는 컬럼으로 NULL값 허용하지 않음
- CHECK : CHECK조건에 만족한 값만을 허락*/
제약 조건의 유형
- column-level의 제약조건
- 하나의 컬럼에 제약 조건을 정의할 때 사용
- create, alter문장으로 컬럼을 정으할 때 데이터 타입 뒤에 정의
- 5가지 유형의 제약조건을 모두 부여
키
- 기본 키 : 절대 겹치면 안 되는 유일한 키. (주민번호 같은 것)
- 후보 키 : 기본 키처럼 겹치지 않고 유니크한 것들 (기본 키가 될 수 있는 것들)
- 대체 키 : 후보 키이나, 기본 키가 되지는 않는 것들.
예시
--문제 dept1이라는 테이블을 아래와 같은 조건으로 만들기
--컬럼명 data type
--부서번호 deptno 숫자 2자리
--부서이름 dname 문자 13자리 (가변길이)
--지역 loc 문자 14자리 (가변길이)
CREATE TABLE dept1
(deptno NUMBER(2), dname VARCHAR2(13), loc VARCHAR2(14));
--질문 dept1 테이블에 칼럼을 추가
ALTER TABLE dept1 ADD
(bigo VARCHAR2(15));
--질문 테이블의 구조 변경 (데이터 타입, 길이)
ALTER TABLE dept1 MODIFY
(bigo VARCHAR2(30));
--질문 테이블에 새로운 행 추가
INSERT INTO dept1 VALUES
(1, 'KNITEC','마산','');
--테이블 전체 내용 보기
SELECT * FROM dept2;
--질문 테이블 이름 바꾸기
RENAME dept1 TO dept2;
--질문 DEPT2 테이블에 주석 달기
COMMENT ON TABLE DEPT2 IS '부서정보 테이블';
--질문 dept2 테이블에 달린 주석 확인하기
SELECT * FROM user_tab_comments
WHERE table_name = 'dept2';
제약 조건 확인
--질문 제약조건 확인하는 방법
SELECT constraint_name, constraint_type
FROM user_constraints;
--부모 테이블 먼저 생성
CREATE TABLE dept3
(deptno NUMBER(2)
CONSTRAINT dept3_deptno_pk PRIMARY KEY,
dname VARCHAR2(15),
loc VARCHAR2(1));
--dept테이블의 deptno컬럼을 참조하는 참조키로 생성
CREATE TABLE emp3
(empno NUMBER(4)
CONSTRAINT emp3_empno_pk PRIMARY KEY,
ename VARCHAR2(15),
deptno NUMBER(2)
CONSTRAINT emp3_deptno_fk
REFERENCES dept3(deptno));
--제약 조건 확인하기
SELECT constraint_name,table_name FROM user_constraints;