국비지원학원/database_Oracle

둘째주 정리

초코맛 2018. 11. 13. 23:56
반응형
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