[SQL] 데이터 품질 높이기 - UNIQUE

·2025년 7월 16일
0

SQL

목록 보기
120/126

💡 UNIQUE 제약이란?

중복된 데이터입력 못하게 막는 제약
ex. 웹에서 회원가입 할 때 id가 중복되지 않도록 대부분 막고 있음

💡 제약을 거는 방법 2가지

1. 테이블 생성 시

  • column level
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';
  • table level
    컬럼이 매우 많은 경우 table level이 편함
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';

2. 만들어진 테이블에

-- 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';

문제1. dept 테이블에 loc 에 unique 제약을 거시오

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';

문제2. dept 테이블에서 loc 가 DALLAS 의 모든 컬럼을 출력하고 실행계획을 보시오

select *
 from dept
 where loc='DALLAS';
 
-- 실행계획 보는 법
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));


문제3. dept 테이블에 아래의 데이터를 입력하시오

deptno : 50
loc : SEOUL
dname: RESEARCH

insert into dept(deptno, loc, dname)
values(50, 'SEOUL', 'RESEARCH');

select * from dept;

문제4. emp21 테이블의 email에 unique 제약을 거시오

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';

📌 unique 제약 삭제

문제5. emp21 테이블의 email에 걸린 unique 제약을 삭제하시오

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';

0개의 댓글