DB 객체

2020. 5. 11. 18:12DB

오라클의 DB객체

1. 종류

1) Table

2) View

3) Sequence

4) Index

5) Synontm

6) procedure

7) trigger

 

2. View

-> 논리적인 가상의 테이블

-> 실제 존재하지는 않지만 마치 테이블처럼 사용

-> 테이블이나 다른 뷰로부터 생성

-> 자주 사용하는 select 구문을 하나의 이름으로 묶어주고 사용하는 것

1) 사용 목적

=> 속도: View나 procedure는 한번 호출하면 메인 메모리에 남아있게 되어서 다음에 호출할 때 속도가 빠름

=> 보안: USER에게 user가 필요한 데이터만 골라줄 수 있어서 보안기능이 강화될 수 있음

 

2) 생성

create [or replace] view 뷰이름 

as 

select 구문

[with check option[

[with read only]

- view는 구조 변경이 안되서 alter view가 없음

- 구조를 변경할 때는 or replace를 이용

- view는 가상의 테이블이지만 dml작업이 가능함.

view에 데이터를 삽입하면 원본 테이블에 데이터가 삽입됨

- dml(insert, update, delete) 작업을 못하도록 할 때 with read only를 추가

- with check option은 view에 존재하는 데이터만 dml 작업을 할 수 있도록 하기 위한 옵션

 

dept 테이블
dept view(데이터가 똑같음)

3. Sequence

- 유일(UNIQUE)한 값을 생성해주는 오라클 객체이다. 

- 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성 할 수 있다. 

- 보통 PRIMARY KEY 값을 생성하기 위해 사용 한다. 

- 메모리에 Cache되었을 때 시퀀스값의 액세스 효율이 증가 한다.

- 시퀀스는 테이블과는 독립적으로 저장되고 생성된다.

 

2) 사용

시퀀스이름.nextval: 다음 시퀀스 값 가져오기

시권스이름.currval: 현재 시퀀스 값 가져오기

-> 생성하고 한번은 nextval을 호출해야 currval을 사용 가능

 

3) 변경

alter sequence 시퀀스 이름

옵션 설정

-> start with는 수정할 수 없음

-> start with를 변경할 때는 삭제하고 다시 생성

 

4) 삭제

drop sequence 시퀀스이름;

 

 

4. Index

- 데이터를 빠르게 찾을수 있도록 설정한 포인터

1) 장점

-> 검색속도가 향상

 

2) 단점

-> 추가적인 공간이 필요

-> 삽입이나 삭제가 빈번히 발생하면 속도가 느려짐.(DML작업이 무거워진다)

 

3) 오라클의 경우는 B* 트리 이용

 

4) primary key와 unique에는 별도의 지정이 없어도 자동으로 인덱스를 설정

 

5) 인덱스 생성

create index 인덱스 이름

on 테이블이름(컬럼이름 나열);

=> 하나의 컬럼으로 만들 수 있지만 여러 개의 컬럼을 이용해서도 생성 가능

=> 하나의 컬럼으로 구성된 인덱스를 단일 인덱스라고 하고 여러 개의 컬럼으로 구성된 인덱스를

     복합 인덱스라고 한다.

=> 인덱스는 계산식에도 생성이 가능함. 

 

6) 인덱스 제거

drop index 인덱스이름;

 

7) 인덱스를 생성해야 하는 이유

- 기본키나 unique속성이 아닌데 검색에 자주 이용하는 컬럼에 생성

- 게시판의 경우 주로 검색은 글번호가 아닌 제목이나 내용 

 

5. Synonym

- 데이터베이스 객체에 별명을 붙이는 것

1. 생성

create synonym 별명

for 원본이름;

 

2. 삭제

drop synonym 별명;

 

3. 사용

- 디비 연동하는 프로그램을 만들 때 synonym을 이용하면 유지보수에 유리

 

6. Procedure

- 프로그래밍 언어의 함수처럼 자주 사용하는 sql을 하나의 이름으로 묶어둔 것.

- 오라클에서 procedure 만드는 문법을 pq/sql이라고 함.

ms-sql server에서 procedure만드는 문법을 t-sql이라고 함.

- 보안에 좋음

 

1. 생성

create [or replace] procedure 프로시저 이름

(변수 자료형....)

is

begin

         sql문장

end;

/

=> dbeaver에서는 / 제외

 

2. 실행

- dbeaver에서 실행

begin

         프로시저이름(매개변수)

end;

 

-> sqlplus의 경우

execute 프로시저이름 (매개변수)

 

3. 삭제

drop procedure 프로시저이름;

 

4. 실습

Dept 테이블에 데이터를 삽입

insert into dept(deptno, dname, loc)

values(11, '영업', '춘천');

 

2) 프로시저 이용

create or replace procedure dept_insert

(vdeptno in dept.deptno%type,

 vdname in dept.dname%type,

 vloc in dept.loc%type)

is

begin 

         insert into dept(deptno, dname, loc)

         values(vdeptno, vdname, vloc);

end;

/

begin

        dept_insert(12,'기획','대전');

end;

 

프로시저 생성/실행

프로시저 사용 이유

- 보안: 유저는 테이블의 구조를 알 필요가 없음.

- 속도: 일반 sql은 실행할 때마다 보조기억장치에서 불어와야 하지만 프로시저와

           뷰는 호출하면 메모리에 적재된 상태로 존재

 

create trigger 트리거이름

[before | after] [insert | delete | update - or로 묶어서 여러개 사용 가능]

on 테이블이름

 

for each row

begin 

         수행할 내용;

end;

/

- insert할 때는 :new 그리고 삭제할 때는 :old. :new와 :old를 이용해서

   새로 추가되는 데이터나 삭제되는 데이터를 이용할 수 있음.

 

trigger 생성(드럽게 귀찮다)

 

 

deptlog 테이블 확인.

 

'DB' 카테고리의 다른 글

데이터 읽어오기  (0) 2020.05.13
Index View  (0) 2020.05.12
제약조건  (0) 2020.05.11
SQL 분류  (0) 2020.05.11
DB 설계  (0) 2020.05.08