PL-SQL Day 3
<SQL언어>
DQL: SELECT
DML: INSERT, UPDATE, DELETE
TCL: COMMIT, ROLLBACK, SAVEPOINT
이상 ~ 8장
이하 9장 ~
DDL(Data Definition Language): CREATE[Auto Commit, 이전에 Commit, Rollback 되지 않은 DML을 Commit 시킨다]
DCL(Data Control Language): GRANT, REVOKE
<Table의 종류>
①User Table : 사용자가 만든 Table
ⓢData-Dictionary(Meta) Table :
i) USER_tables : 사용자가 테이블을 생성, 변경시 기록
ii)
③Temporary Table :
④External Table :
*File-System :
파일리스트의 정보를 사람이 관리하므로 파일리스트와 파일의 불일치 발생으로 효과적인 관리X
<DELETE in DML vs TRUNCATE in DDL>
1. DELETE FROM 테이블명
2. TRUNCATE TABLE 테이블명
*TRUNCATE는 DDL이기때문에 Auto Commit을 동반한다
DELETE에 의한 삭제는 Data만 삭제되어 추가 할당된 공간은 그대로 있다, 따라서 최초 크기 보다 늘어난 공간으로 인해 검색시 성능저하가 우려됨
TRUNCATE는 최초 크기만 남겨두고 늘어난 공간은 반납
-> DELETE는 부분적인 삭제가 요구될때 사용하고, TRUNCATE는 전체적인 데이터 삭제시 이용한다
<DATA TYPE>
CHAR(CHARACTER) : 고정길이 datatype, ex)사원번호, 구분자
VARCHAR2 : 가변길이 datatype, (ANSI 표준에서 VARYING CHARACTER), ex)주소, 이름, 비고, 적요
NUMBER : 00000 ~ 99999의 정수, (ANSI 표준에서 decimal), ex) number(7, 2) 소수값. 전체 7자리 중에서 소숫점 이하 자리가 2자리
DATE, TIMESTAMP : 연월일 시간 제공에서는 같지만 포맷이 다르다
Interval Year to Month
Month to Day
Day to Time
Time to Minute
Minute to Second
Long Raw : Binary-Data, 특정 컬럼에 최대 2GB 까지 저장
Long : Varchar2(최대4000byte)와 동일, 그러나 Long은 최대 2GB 까지 저장
Long과 Long Raw는 하나의 테이블에 하나만 저장할 수 있다. 따라서 2GB이상을 저장할려면 테이블을 2개이상 만들어야함. V8부터 4GB 까지 저장할 수 있는 타입 나옴
BLOB(Binary Large Object)
CLOB(Char Large Object)
①4GB까지 저장
ⓢ하나의 Table에 여러개를 저장
③V8부터
-> DBMS_LOB 라는 패키지를 이용해서 Insert, Update, Delete를 한다
<ROWID 컬럼>
: LEVEL 사용시
18자리로 구성
XXXXXX(객체번호)-XXX-XXXXXX(블록주소)-XXX(저장될때 순번)
<CONSTRAINTS>
Data Integrity 보장 방법 3가지
Application을 통한 구현
트리거 이용
제약조건
1. PK
2. FK
3. Unique
4. CHECK
5. NOT NULL
특징: - 하나의 컬럼에 여러 개의 제약 조건 설정 가능(column-level, table-level)
- 여러 개의 칼럼으로 하나의 제약 조건 설정 가능
유형
1. COLUMN-LEVEL
- 하나의 컬럼에 제약 조건을 정의할 때
- CREATE, ALTER 문장으로 컬럼을 정의할 때 데이터 타입 뒤에 정의
- 5가지 유형의 제약 조건 모두 부여
2. TABLE-LEVEL
- 하나의 컬럼에 여러 개의 제약 조건을 부여할 때
- 여러 개의 컬럼에 제약 조건을 정의할 때
- ★★NOT NULL 제약 조건은 부여할 수 없다
종류
1. PRIMARY-KEY : 식별키는 하나의 테이블에 하나만 존재, 식별키는 정의하면 인덱스가 자동 생성
2. FOREIGN-KEY :
3. CHECK :
4. UNIQUE : 컬럼의 모든 값이 유일, NULL 입력 가능, INDEX 자동 생성, 하나의 테이블에 여러 개의 유일 키 생성
5. NOT NULL
타입과 Constraint 사이에 CONSTRAINT Contraint명이 들어간다
CONSTRAINT SYS_1001 <- 안 쓰면 디폴트로 들어간다
<External 테이블>
데이터베이스는 구조만 있고 데이터는 OS상의 파일에 있다
1. 가상 디렉토리 생성
http://www.oracle.com/oradata/index.html
oradata : Virtual Directory
용도: OS상에 있는 데이터를 데이터베이스에 업로드
<Temporary Table>
일시적 테이블 저장
ON COMMIT DELETE ROWS; -> commit이 되는 시점
ON COMMIT PRESERVE ROWS; -> 세션이 종료되는 시점
<Index>
인덱스방법:
①Full-Table-Scan
②Index-Scan
Index Type ┌
└ physical : B*tree-index, Reserve-idnex, Descending-Index, Binary-Index
<View>
정의:가상의 table
용도:자주 사용되는 join 문장들을 쉽게 사용할 수 있도록 한다
문법:CREATE [OR REPLACE] VIEW VIEW_EMP AS [JOIN 문장]
종류:
①normal-view
②inline-view
③materialized-view
특징:물리적 저장 공간X(데이터 X), 캡슐기능(보안),
기타:때에 따라서 입력, 수정, 삭제 가능
<Materialized-View>
View: 가상의 테이블 - 데이터를 가지고 있지 않다
정의: 데이터를 가지고 있다 but SELECT만 할 수 있고, INSERT, UPDATE, DELETE는 서버에서만 할 수 있다(서버가 refresh한다)
용도: 주문
Build immediate refresh FAST
Enable query rewrite
complete -> drop 하고 다시 집계,
fast(=force) -> 관련된 데이터만 갱신
start with sysdate + 1/24 -> 한시간에 한번씩 commit 한다
1 -> 하루에 한번씩 commit 한다
이기능 사용 가능 확인
CONNECT /AS SYSDBA
SELECT * FROM V$OPTION;
<SEQUENCE>
연속적인 번호 부여(ex.접속관리)
<SYNONYM>
용도: 1. 또 다른 이름으로 밖에 사용할 수 없는 경우
2. 긴 이름을 짧은 이름으로
문법: CREATE [PUBLIC] SYNONYM [SYNONYM명] FOR [사용자명].[테이블명]
*DB에서 사용자 계정
1. 인증
2. 객체의 이름 결정
3. 백업과 복구 단위 결정
업무별로 생성
(사용용이, B & R용이, OLTP성 환경)
전체업무를 하나의 사용자로 생성
(분산DB, DW환경[통계])
문법: CREATE USER haksa [아이디생성]
IDENTIFIED BY haksa123 [비밀번호생성]
GRANT create session TO haksa; [세션생성권한부여]
GRANT create table TO haksa; [테이블생성권한부여]
ALTER USER haksa
IDENTIFIED
<권한>
┌ System 권한 : DB에 대한
└ Object 권한 : 특정 객체에 대한
*** Data Dictionary 중요함