[전 수업] DB의 기초 내용이 가물가물 하여 복습을 해 보았다
[본 수업] 전에 해보지 않았던 제약조건을 추가하여 테이블 생성 및 오류 종류를 확인해보자
- 제약조건(constaint)
1)정의
테이블의 해당 칼럼에 원치않는 데이터가 입력/변경/삭제되는 것을 방지하기위해
테이블 생성 또는 변경시 설정하는 조건
2)종류
primary key 기본키 유일성 null값을 인정하지 않음
(테이블당 1개만 가능)
foreign key 외래키 자식테이블이 부모테이블 칼럼을 참조
(특정 데이터만 입력가능)
->references 부모테이블(칼럼면)
unique 유니크 중복을 허용하지 않음 null값을 1번만 허용
check 체크 특정데이터만 입력가능not null 빈값을 허용하지 않음
- 주민번호 ->pk
이메일 핸드폰번호 ->unique로 주는 경우가 많다
# 제약조건을 테이블에 반영 #
3) 제약조건을 반영한 테이블 생성하기
create table c_emp(
id number(5) constraint c_emp_id_pk primary key
,name varchar2(25) constraint c_emp_name_nn not null
,salary number(7,2) default 0 --(데이터가 입력이 안되어있으면)
,phone varchar2(15) constraint c_emp_phone_ck check(phone like '1234-%')
,dept_id number(7) constraint c_emp_dept_id_fk references dept(deptno)
);
4) 제약조건 이름 검색하기
select *from user_constraints;
select *from user_constraints where table_name='DEPT';
select *from user_constraints where table_name='C_EMP';
※테이블에 관련된 제약조건만 선정해서 검색할 수 있다.
5) 제약조건은 수정할 수 없고 삭제만 가능함.
alter table c_emp drop constraint c_emp_name_nn;
6) 제약조건 추가하기
alter table c_emp add constraint c_emp_name_un unique(name);
alter table c_emp modify
(name varchar2(25) constraint c_emp_name_nn not null);
※ not null 제약조건은 add 로 할 수 없고 modify로 가능
# 제약조건을 테이블에 반영하지 않고 시작 #
0) 제약조건이 설정되지 않은 테이블 생성 및 행추가
create table c_emp(
id number(5)
,name varchar2(25)
,salary number(7,2)
,phone varchar2(15)
,dept_id number(7)
);
insert into c_emp(id,name) values(1,'개나리');
insert into c_emp(id,name) values(1,'진달래');
insert into c_emp(id,name) values(1,'라일락');
1) id칼럼에 pk제약조건 추가
※ alter table 테이블이름 add constraint 제약조건이름 제약조건종류(필드명);
alter table c_emp add constraint c_emp_id_pk primary key(id);
id가 중복되는걸 막기위해 id 에 primary key를 건다
오류 보고 -ORA-00001: unique constraint (JAVA0514.C_EMP_ID_PK) violated
select *from user_constraints where table_name='C_EMP';
2) salary칼럼에 check 제약조건
create table c_emp(
id number(5)
,name varchar2(25)
,salary number(7,2) constraint c_emp_salary_ck check(salary between 100 and 1000)
,phone varchar2(15)
,dept_id number(7)
);
insert into c_emp(id,name,salary) values(1,'kim',100);
insert into c_emp(id,name,salary) values(1,'lee',1000);
insert into c_emp(id,name,salary) values(1,'lee',10000);
3) name칼럼에 unique 제약조건
create table c_emp(
id number(5)
,name varchar2(25) constraint c_emp_name_uq unique
,salary number(7,2)
,phone varchar2(15)
,dept_id number(7)
);
insert into c_emp(name) values('무궁화');
insert into c_emp(name) values('무궁화');
insert into c_emp(id) values(1);
insert into c_emp(id) values(2);
select* from c_emp;
4) dept_id칼럼에 foreign key 제약조건
drop table c_emp;
create table c_emp(
id number(5)
,name varchar2(25)
,salary number(7,2)
,phone varchar2(15)
,dept_id number(7) constraint c_emp_dept_id_fk references dept(deptno)
);
insert into c_emp(name,dept_id) values('개나리',10);
insert into c_emp(name,dept_id) values('진달래',40);
insert into c_emp(name,dept_id) values('라일락',90);