Data Base_Oracle/SQL

SQL 제약조건 Primary Key & Unique

pathas 2020. 1. 4. 15:57

Primary Key_기본키

  • 테이블의 행을 구분하는 키워드로 사용
  • Not null + Unique index key 자동으로 부여
    반드시 데이터를 입력해야 하면서 값이 중복되면 안되는 필드에 적용
    ※ index key : 책갈피와 유사한 역할, 검색속도를 향상시킴
  • ex) ID, 사원번호(empno), 주민등록번호, 이메일 등

# Primary Key 추가 예제

[ SQL> alter table b_prtest add constraint b_prtest_pk_id primary key(id);
SQL> desc b_prtest ]

이름 널? 유형
ID NOT NULL NUMBER(5)
IRUM   VARCHAR2(30)

# Primary Key 중복 오류 예제

▷ b_prtest 테이블의 모든 데이터 삭제
[ SQL> delete from b_prtest;
SQL> select count( * ) from b_prtest; ]

COUNT( * )
0

▷ 빈 테이블에 동일한 id값 입력
[ SQL> insert into b_prtest values(1, '홍길동');
1개의 행이 만들어졌습니다.
SQL> insert into b_prtest values(1, '홍길동');
1행에 오류:
ORA-00001: 무결성 제약 조건(TEST1.B_PRTEST_PK_ID)에 위배됩니다 ]

 

▶ id값을 다르게 입력
[ SQL> insert into b_prtest values(2, '홍길동');
SQL> select * from b_prtest; ]

ID IRUM
1 홍길동
2 홍길동

#Primary key 제거 예제

▶ [ SQL> alter table b_prtest drop constraint b_prtest_pk_id;
SQL> desc b_prtest ]

이름 널? 유형
ID   NUMBER(5)
IRUM   VARCHAR2(30)

Unique

입력하지 않아도 되지만 중복된 값은 저장되지 못하게 하는 제약조건

# 예제

▶ table1생성, age필드에 unique 제약조건 부여
[ SQL> create table table1(age number(2) unique); ]

 

▶ age = 11 저장
[ SQL> insert into table1 values(11); ]

 

▶ age = 22 저장
[ SQL> insert into table1 values(22); ]

 

▶ id = null 저장
[ SQL> insert into table1 values(null); ]

 

▶ id = '' 저장
[ SQL> insert into table1 values(''); ]

 

▶▶ id = 11 저장
[ SQL> insert into table1 values(11);
1행에 오류: ORA-00001: 무결성 제약 조건(TEST1.SYS_C0011063)에 위배됩니다 ]

 

※ null값('')은 허용하지만 동일한 값이 저장되는 것만은 허용하지 않음


primary key는 id처럼 꼭 필요하면서도 중복되면 안 되는 데이터를 저장할 때 사용하며,

테이블의 행을 구분하는 역할도 하기 때문에 아주 중요한 제약조건이라고 할 수 있습니다.