IT개발/Oracle Database2010. 8. 31. 02:44

테이블 제약 조건

Primary Key(기본키)  : 유일한 값 + Not Null인 값
Foreign Key(외래키)  : 다른 테이블에 들어있는 값만 저장, 다른 테이블 참조
Not Null / Null          : Null을 허용 아니면 반드시 입력받게 할건지
Unique                     : 유일한 값만 저장되는 필드
Check                     : 특정한 값만 저장되도록 설정
Default                    : 기본값으로 특정 값을 저장되도록 설정

샘플 테이블 생성
SQL> create table emp1
  2  (
  3     empno number(4),
  4     ename varchar2(10),
  5     job varchar2(9),
  6     deptno number(4)
  7  );

널 데이터 입력 연습
SQL> insert into emp1 values(null, null, null, 40);

널 제약 조건을 걸고 테이블 생성
SQL> create table emp2
  2  (
  3     empno number(4) not null,
  4     ename varchar2(10) not null,
  5     job varchar2(9),
  6     deptno number(4)
  7  );
SQL> insert into emp01 values(null, null, 'MANAGER', 40);         -- 에러 (not null 제약조건)
SQL> Insert Into emp2 Values(1, 'SCOTT', 'MANAGER',40);       -- 성공


Check 제약 조건 : 반드시 특정 값만 입력
SQL> Create Table emp3
  2  (
  3     empno number(2) not null,
  4     ename varchar2(20) not null,
  5     gender varchar2(10) check (gender in ('M', 'F'))
  6  );

Unique 제약조건 : 사번은 유일해야 한다.
SQL> Create Table emp4
  2  (
  3     empno number(2) not null unique,
  4     ename varchar2(20) not null,
  5     gender varchar2(10) check (gender in ('M', 'F'))
  6  );
Insert Into emp4 Values(1, 'SCOTT', 'M'); -- 성공
Insert Into emp4 Values(1, 'SCOTT', 'F'); -- 에러 : 1번 사번 저장

Primary Key 제약 조건 : Not Null 제약조건 + Unique 제약 조건
SQL> Create Table emp5
  2  (
  3     empno number(2) Primary Key,
  4     ename varchar2(20) not null,
  5     gender varchar2(10) check (gender in ('M', 'F'))
  6  );

■ Default 제약 조건 : 기본값 입력
SQL> Create Table emp6
  2  (
  3     empno number(2) Primary Key,
  4     ename varchar2(20) not null,
  5     addr varchar2(20) Default('SEOUL')
  6  );
SQL> insert into emp6(empno, ename) values(1, 'SCOTT');

■ Foreign Key 제약 조건 : 외래키(다른 테이블의 필드 값 참조)
Select * from dept;

SQL> Create Table emp7
  2  (
  3     empno number(2) Primary Key,
  4     ename varchar2(20) not null,
  5     deptno number(2) references dept(deptno)           # 다른 테이블에서 사용하고 있는 값만 사용할수 있다.
  6  );

SQL> insert into emp7(empno, ename, deptno)
  2  values(1, 'SCOTT', 50); -- 에러

■ 제약 조건에 이름 붙이기
SQL> Create Table emp8
  2  (
  3     empno number(2) constraint emp8_empno_pk Primary Key,
  4     ename varchar2(20) constraint emp8_ename_nn not null,
  5     addr varchar2(10) constraint emp8_addr_uk unique,
  6     deptno number(2) constraint emp8_deptno_fk references dept(deptno)
  7  );

제약 조건 수정/삭제
Alter table emp8
Drop Primary Key;                    -- 기본 키 삭제

Alter table emp8
Add Primary Key(empno);        -- 기본 키 추가

■ 필드명 따로 제약조건 따로 설정
-- 복합키(Primary Key)를 두고자할 때
-- 하나의 테이블에 기본키가 2개 이상일 때...
SQL> Create Table emp9
  2  (
  3     empno number(2),
  4     ename varchar2(20) Not Null,
  5     addr varchar2(10),
  6     deptno number(2),

         Primary Key(empno),
         Unique(addr),
         Foreign Key(deptno) References dept(deptno)           
      
  7  );

Posted by 시티락