일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 카카오
- 실기
- 코딩테스트
- Numpy
- level 1
- 빅데이터 분석 기사
- 알고리즘
- 빅분기
- SQL
- seaborn
- 프로그래머스
- Oracel
- Python
- 튜닝
- 오라클
- pandas
- sklearn
- 머신러닝
- level 2
- 파이썬
- oracle
- 데이터 분석
- Kaggle
- R
- python3
- 실습
- matplotlib
- Today
- Total
라일락 꽃이 피는 날
[Oracle] 제약 (constraint) 1 본문
제약 (constraint)
데이터의 품질을 높이기 위해서 사용하는 데이터 베이스 오브젝트
제약의 종류
1. primary key 제약 : 해당 테이블을 대표하는 컬럼에 거는 제약
이 제약이 걸리면 해당 컬럼에는 중복된 데이터와 null 값을 입력할 수 없다.
2. unique 제약 : 중복된 데이터를 입력하지 못하게 하는 제약
3. not null 제약 : null 값을 입력하지 못하게 하는 제약
4. check 제약 : 사용자가 허락한 데이터만 입력하게끔 하는 제약
5. foreign key 제약 : 자식 테이블에 거는 제약 (부모 테이블에게 의존할 자식 테이블)
[테이블에 제약 걸기]
1. 테이블을 생성할 때 제약을 거는 방법
1-1. column level (컬럼 레벨)
-- primary key 제약
create table dept2
( deptno number(10) constraint dept2_deptno_pk primary key,
dname varchar2(14),
loc varchar2(10) );
dept2_deptno_pk : 제약 이름 = 테이블명_컬럼명_제약
dept2 테이블의 deptno 에는 중복된 데이터와 null 값이 입력될 수 없다.
-- unique 제약
create table emp507
( empno number(10),
ename varchar(20) constraint emp507_ename_un unique,
sal number(10) );
-- not null 제약 (column level 로만 가능)
create table emp407
( empno number(10) constraint emp407_empno_nn not null,
ename varchar2(10) constraint emp407_ename_nn not null,
sal number(10) );
-- not null 제약
create table emp408
( empno number(10) not null,
ename varchar2(20) not null,
sal number(10) );
not null 제약을 제약 이름을 만들지 않고 만들면 오라클이 알아서 제약 이름을 부여하게 된다.
그렇게 되면 나중에 제약을 삭제할 때 불편할 수 있다.
1-2. table level (테이블 레벨)
-- primary key 제약
create table dept3
( deptno number(10),
dname varchar2(14),
loc varchar2(10),
constraint dept3_deptno_pk primary key(deptno) );
-- unique 제약
create table emp508
( empno number(10),
ename varchar(20),
sal number(10),
constraint emp508_ename_un unique(ename) );
2. 이미 만들어진 테이블에 제약을 거는 방법
특정 컬럼에 primary key 제약이나 unique 제약을 걸게 되면 인덱스가 자동으로 생성된다.
-- primary key 제약
alter table dept
add constraint dept_deptno_pk primary key(deptno);
위의 명령어가 실행되었다는 것은 dept 테이블의 deptno 에 중복된 데이터나 null 값이 없었기 때문이다.
만약에 중복된 부서 번호가 있었거나 null 값이 있었다면 위의 명령어는 수행이 안 되고 에러가 났을 것이다.
-- unique 제약
alter table emp
add constraint emp_ename_un unique(ename);
위의 명령어가 성공적으로 수행되었다면 emp 테이블의 ename 에 중복된 데이터가 없었기 때문이다.
-- not null 제약
alter table emp
modify sal constraint emp_sal_nn not null;
이미 기존 데이터에 null 값이 존재하면 not null 제약이 걸리지 않는다.
유일하게 not null 제약만 modify 를 쓰고 나머지 제약은 전부 add 를 사용한다.
[테이블에 걸린 제약 확인]
select t.table_name, t.constraint_name, c.column_name, t.constraint_type
from user_constraints t, user_cons_columns c
where t.constraint_name = c.constraint_name
and t.table_name='테이블명';
user_constraints 와 user_cons_columns 는 제약을 확인하는 데이터 사전이다.
테이블의 어느 컬럼에 어떤 제약이 걸려있는지 확인할 때 사용한다.
이때 테이블명은 반드시 대문자로 기술해줘야 한다.
데이터 분석하기에 앞서서 정확한 데이터 분석을 위해 분석할 테이블에 제약이 있는지 확인해야 한다.
[테이블에 걸린 제약 삭제]
alter table 테이블명
drop constraint "제약 이름";
'프로그래밍 > Oracle' 카테고리의 다른 글
[Oracle] WITH ~ AS 절 (0) | 2022.06.14 |
---|---|
[Oracle] 제약 (constraint) 2 (0) | 2022.06.14 |
[Oracle] 머신러닝 - 미국인 의료비 데이터 (0) | 2022.06.12 |
[Oracle] Flashback 기술 2 - Drop / Version Query (0) | 2022.06.10 |
[Oracle] Flashback 기술 1 - Query / Table (0) | 2022.06.09 |