중복된 데이터를 입력 못하게 막는 제약
ex. 웹에서 회원가입 할 때 id가 중복되지 않도록 대부분 막고 있음
create table emp81
( empno number(10) constraint emp81_empno_un unique,
ename varchar2(20),
sal number(10) );
select a.table_name, a.constraint_type, a.constraint_name, b.column_name
from user_constraints a, user_cons_columns b
where a.constraint_name = b.constraint_name
and a.table_name = 'EMP81';
create table emp82
( empno number(10),
ename varchar2(20),
sal number(10),
constraint emp82_empno_un unique(empno) );
select a.table_name, a.constraint_type, a.constraint_name, b.column_name
from user_constraints a, user_cons_columns b
where a.constraint_name = b.constraint_name
and a.table_name = 'EMP82';
-- emp 테이블에 ename 에 unique 제약을 거시오
alter table emp
add constraint emp_ename_un unique(ename);
select a.table_name,a.constraint_type, a.constraint_name, b.column_name
from user_constraints a, user_cons_columns b
where a.constraint_name = b.constraint_name
and a.table_name = 'EMP';
loc에 중복된 데이터가 없기 때문에
unique 제약이 잘 걸릴 수 있는 것
alter table dept
add constraint dept_loc_un unique(loc);
select a.table_name,a.constraint_type, a.constraint_name, b.column_name
from user_constraints a, user_cons_columns b
where a.constraint_name = b.constraint_name
and a.table_name = 'DEPT';
💡 중요!
primary key
제약이나unique
제약을 걸면
해당 컬럼에 자동으로 unique 인덱스가 생성됨
select index_name, uniqueness
from user_indexes
where table_name='DEPT';
select *
from dept
where loc='DALLAS';
-- 실행계획 보는 법
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
deptno : 50
loc : SEOUL
dname: RESEARCH
insert into dept(deptno, loc, dname)
values(50, 'SEOUL', 'RESEARCH');
select * from dept;
alter table emp21
add constraint emp21_email_un unique(email);
select a.table_name,a.constraint_type, a.constraint_name, b.column_name
from user_constraints a, user_cons_columns b
where a.constraint_name = b.constraint_name
and a.table_name = 'EMP21';
alter table emp21
drop constraint emp21_email_un;
select a.table_name,a.constraint_type, a.constraint_name, b.column_name
from user_constraints a, user_cons_columns b
where a.constraint_name = b.constraint_name
and a.table_name = 'EMP21';