제약조건을 쓰는 이유 : 데이터의 품질을 좋게 만들기 위해 데이터의 규칙성을 만듬
1. Primary key
- 테이블 대표키
- 유일키 값, null값 허용할수없도록
- 자동으로 unique index 생성
- 테이블 하나만 생성
alter table emp add primary key;
--> 제약조건 이름을 적지 않았기 때문에 제약조건 이름이 자동으로 sys_c숫자로 쓰여짐
alter table emp add constraint emp_id_pk primary key(id);
--> 이렇게 제약조건 이름을 꼭 쓰자
2. Foreign key (= 외래키, 참조무결성)
- 동일한 테이블이나 다른 테이블의 primary key, unique key를 참조한다.
- null허용, 중복값 허용
- 참조하는 키값만 입력/수정해야 한다.
- 참조하는 키가 있을 경우 참조당하는 row를 삭제 못한다.
alter table emp add constraint emp_dept_id_fk
foregin key (dept_id) references dept (dept_id);
--> 오류남. dept_id에 primary key가 안걸려있어서
dept_id에 primary key를 걸고 다시해보자!
alter table dept add constraint dept_id_pk primary key(dept_id);
alter table emp add constraint emp_dept_id_fk
foreign key(dept_id) references dept(dept_id);
3. Unique key
- 유일한 값만 체크
- null 허용
- 자동으로 unique index 생성
alter table dept add constraint dept_name_uk unique (dept_name);
4. Check key
- 조건에 값이 true일 경우에만 입력(insert), 수정(update) 할 수 있다.
- null 값 허용, 중복값 허용
alter table emp add sal number;
desc emp
alter table emp add constraint emp_sal_ck check (sal > 1000);
select * from user_constraints where table_name = 'EMP'
update emp
set sal = 100
where id = 100;
--> 오류남 체크제약조건에 위반되어서
update emp
set sal = 10000
where id = 100;
--> 실행됨
5. Not null key
- null값을 불허
alter table emp add constraint emp_name_nn not null(name);
--> 오류남
alter table emp modify name constraint emp_name_nn not null;
--> 이렇게 해야함, modify 사용
제약조건 이름 변경
alter table emp_copy rename constraint copy_emp_pk to emp_copy_pk;
제약조건 삭제
alter table emp drop constraint emp_id_pk;
alter table emp drop primary key;
insert into emp (id, name, day)
select employee_id, last_name, hire_date
from hr.employees;
권한이 없으면 오류가 난다. 오류을 해결하기 위해서는
1) hr session 에 접속
2) 객체권한 부여
grant select on hr.employees to oltp;
select * from user_tab_privs;
제약조건을 포함하나 테이블 만들기
create table dept_new(
dept_id number(3) constraint dept_pk primary key, -- 열레벨 정의
dept_name varchar2(30) constraint dept_nn not null, -- 열레벨 정의
mgr number(5),
constraint dept_uk unique(dept_name)); -- 테이블 레벨 정의
- 열레벨 정의/테이블 레벨 정의 아무거나 사용하면 됨
- not null 제약조건은 무조건 열레벨정의 사용
'컴퓨터 > SQL' 카테고리의 다른 글
오라클 SQL - External Table 연습 (0) | 2020.02.11 |
---|---|
다중 테이블 INSERT (0) | 2020.02.11 |
Fedora 30 workstation iso 설치 방법 (0) | 2020.02.06 |
VMware workstation 15 설치방법 (0) | 2020.02.06 |
오라클 SQL JOIN문 정리 (0) | 2020.01.30 |