- 2019/07/19-DB (제약조건)2019년 07월 19일
- 조별하
- 작성자
- 2019.07.19.오후05:43
[전 수업] 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);
'JAVA 교육 > Sql' 카테고리의 다른 글
2019/07/23 Group by 명령어 & 서브쿼리 (0) 2019.07.24 2019/07/22 오라클 함수 (0) 2019.07.24 2019/07/22 SQL 활용 연습문제 (0) 2019.07.22 2019/07/19 시나리오 정의서에 의한 테이블 작성 & 시퀀스 (0) 2019.07.22 2019/07/19-SQL (sqldeveloper를 이용한 DB) (1) 2019.07.19 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)