SQL 제약조건 Primary Key & Unique
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처럼 꼭 필요하면서도 중복되면 안 되는 데이터를 저장할 때 사용하며,
테이블의 행을 구분하는 역할도 하기 때문에 아주 중요한 제약조건이라고 할 수 있습니다.