위로 아래

제약조건

CONSTRAINT(제약조건)
테이블의 컬럼에 조건을 정해주는 것

 

제약조건의 특징

  1. 사용자에 의해 발생한 잘못된  DML이 실행되지 않는다
  2. 제약 조건에 대한 모든 정보가 자료사전에 저장된다
  3. 원할 때는 언제든지 기능을 비활성화 할 수 있고 또한 활성화 할 수 있다
  4. 처리결과가 즉시 사용자에게 보여진다.
  5. 하나의 컬럼에 여러 개의 제약조건을 설정할 수 있다.(column-level과 table-levle)
  6. 여러 개의 컬럼으로 하나의 제약 조건을 설정할 수 있다.
  7. 제약 조건의 관리는 서버가 담당
  8. TABLE에 행(레코드) 삽입, 수정, 삭제시 Constraint를 검사
  9. TABLE 생성시 constraint가 생략되어도 생성가능
  10. 다른 테이블과 종속관계있다면 테이블 삭제를 방지
  11. 컬럼 레벨과 테이블 레벨에서 정의가 가능

 

 

제약조건의 종류

  1. PRIMARY KEY : TABLE내에서 각 Row를 식별할 수 있는 유일한 값, 식별키(기본키)
  2. FOREIGN KEY : 참조된 테이블과의 관계를 적용하는 컬럼, 외래키
  3. UNIQUE KEY : 컬럼내에서 유일한 값(NULL값 허용)
  4. NOT NULL : 참조된 TABLE과의 관계를 적용하는 컬럼으로 NULL값 허용하지 않음
  5. CHECK : CHECK조건에 만족한 값만을 허락*/

 

제약 조건의 유형

  1. column-level의 제약조건
  2. 하나의 컬럼에 제약 조건을 정의할 때 사용
  3. create, alter문장으로 컬럼을 정으할 때 데이터 타입 뒤에 정의
  4. 5가지 유형의 제약조건을 모두 부여

 

  1. 기본 키 : 절대 겹치면 안 되는 유일한 키. (주민번호 같은 것)
  2. 후보 키 : 기본 키처럼 겹치지 않고 유니크한 것들 (기본 키가 될 수 있는 것들)
  3. 대체 키 : 후보 키이나, 기본 키가 되지는 않는 것들.

 

예시

--문제 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;