반응형
1.제약사항(Constraint)
~지난주 제약사항 부분~
-
컬럼에 필요한 값만 입력받을때 사용하는것으로 테이블생성시 부여하거나, 만들어두고 alter를 이용해서 부여할 수 있다.
-
user_constraints oracle dictionary(오라클에서 제공하는 정보가 들어있는 테이블)에서 제약사항을 확인할수 있고 / select * from user_constraints로 확인 가능하다.
-
primary key, foreign key, unique, check, not null 이 있고, default도 함께 많이 본다.
-
key의 제약사항을 설정하면 테이블간의 관계가 설정된다.(P부모, F자식 관계)
-
제약사항명은 테이블명처럼 유일해야하고, 테이블이 지워지면 제약사항도 함께 지워진다.=>휴지통삭제 물론 해야함
-
문법) create table 테이블명 (
컬럼명 데이터형(크기) constraint 제약사항명 제약사항의종류,
~, =>컬럼명과 정의하면 컬럼단위 제약사항(Column Level Constraint)
~, (제약사항명은 생략가능하나, SYS~로 명명되어 구분이 어렵다.)
~, (오라클은 자동생성부여해줌)
constraint 제약사항명 제약사항종류(적용컬럼),
~, =>테이블 정의 끝에 정의하면 테이블단위 제약사항(Table Level Constraint)
~
);
-
테이블에 필요한 값만 넣기위해 설정.
-
primary key, foreign key, unigue, check, not null (default)
-
(사용자가 원하는 조건의 데이터만 유지하기위한, 즉 데이터의 무결성을 유지하기 위한 데이터 베이스의 보편적인 방법으로 테이블의 특정 컬럼에 설정하는 제약이다.)
-primary key
-
주키, 일차키, 기본키 라고 하며, 컬럼값에 null허용을 하지않으면서(모든값을 가지면서) 유일하게 관리해야 할 때 설정한다. 이 조건을 만족하지 않으면 Error가 난다.
-
하나의 테이블에 하나의 기본키제약만 정의할 수 있지만 하나의 컬럼일 수도, 컬럼이 여러개 일수도 있다.
-
정렬(order by, rank함수) 없이 조회시에 일차적으로 참조하여 나열된다.
-
다른테이블(자식테이블)에서 foreign key로 참조될수 있다.(일반적으로 외래키를 가진 테이블을 참조하는테이블이라고 하고, 기본키를 가진 테이블을 참조되는 테이블이라고 한다.)
-
-컬럼단위( column level constraint )제약사항 : 컬럼바로 뒤(컬럼단위일땐, PK컬럼이 하나일때만 가능하다.)
create table 테이블명 (
컬럼명 데이터형(크기) constraint 제약사항명 제약사항의종류(=primary key) );
=> primary key는 PK라고도 한다. 따라서 PK_테이블명으로 제약사항명을 준다.
-
-테이블단위 ( table level constraint )제약사항 : 테이블 정의후 이어서, pk가 여러 컬럼으로 구성되어야하는 경우 사용하거나 컬럼과 제약사항을 분리하여 정의하는 경우 덜 복잡해 보여 보기 쉽다 =>테이블생성시 복잡도를 낮출수있다.
create table 테이블명 (
컬럼명 데이터 형 (크기),
~~~,
~~~,
constraint 제약사항명 primary key(컬럼명,,,,,),
constraint 다른 제약사항~~~
);
ex) 주민번호, 의료보험번호, 카드번호등 고정길이를 가지면서 식별하는것 또는 id(예외도 있지만 유일하며 꼭가져야한다는 점)
-
여러컬럼으로 구성되는 경우 모든컬럼에 동일값이 들어가는 경우에만 Error발생=>이때만 중복으로 인식하여 제약사항 위배
-
select * from user_constraints; 조회시 sys라고 된건 시스템이 알아서 준것,
-
조회시 status 가 enabled로 되어있으면 제약사항에 위배되어도 얼마든지 중복을 넣을수있다.
-
전화번호 유일하지만 빈번히바꿀수 있어 후보 ->후보키 (primary key가 될수있을만한 컬럼
-
이메일 유일 도메인 관리가 되어서.....이메일은 안가질수도있어 ->후보키
-
주민번호=>본인의 피해사실입증시 바꿀수있지만 어려워 제일 타당.=>주민번호는 null을 허용하지 않으면서 유일해야한다는 조건 일치!
-
ex)컬럼하나 PK=>성공 : 최초 insert시/중복되지않을때/ =>실패 : 중복값/null입력시(컬럼생략시,''로 값넣지 않을시(java에서 mt로 불림))_숫자,날짜는 컬럼생략시에만/문자열은 컬럼생략시,''(empty)로 추가시
-
=>insert니까 commit필수(메모리에 있는걸 하드디스크에 옯기며 모든사용자에게 알림)
-
예제보는중
-foreign key
-
-column level constraint : 컬럼설정 바로뒤에 제약사항을 설정하는것
create table 테이블명(
컬럼명 데이터형(크기) constraint 제약사항명 제약사항종류 references 부모테이블명(컬럼명),
~
);
-
-table level constraint : 테이블 생성시 컬럼을 모두 정의한후 설정하는 것
create table 테이블명(
컬럼명 데이터형(크기),
~,
constraint 제약사항명 제약사항종류(컬럼명,,,),
constraint 다음제약사항명~~~,
);
-
다른테이블의 PK컬럼값과 동일한 값으로만 추가할때 설정. 테이블간의 관계를 형성시키고 참조키를 가진테이블은 자식테이블, 참조하는 테이블은 부모테이블이다. 이 관계를 도식화해놓은 것을 ERD라고 한다.
-
중복값 허용, null허용 , 대신에 값이 들어온다면 부모테이블과 같은 값만 받을 수 있다.
-
하나의테이블에 여러개 설정이 가능하며, 부모테이블에서 자식레코드가 발견돼면 삭제할수 없다.
-
(on delete cascade옵션을 설정하면 부모레코드 삭제시 모든 자식레코드 함께 삭제
-
자식테이블의 컬럼명은 부모테이블의 컬럼명과 같을 필요는 없으나 데이터형과 크기는 동일하게 설정.
-
예제보는중
-unique
-check
-not null
-(제약사항은 아니지만) default
2.Alter (다양한것을 바꾸어준다)
-alter의 여러쓰임
1.
반응형
'국비지원학원 > database_Oracle' 카테고리의 다른 글
PL/SQL정리_셋째주 정리 (0) | 2018.11.14 |
---|---|
17일차 (0) | 2018.11.13 |
16일차 (0) | 2018.11.10 |
15일차 (0) | 2018.11.10 |
14일차 (0) | 2018.11.07 |