뇌운동일지

[Oracle] 데이터 정의어 (DDL; Data Definition Language) 본문

DB/Oracle

[Oracle] 데이터 정의어 (DDL; Data Definition Language)

purpleduck 2020. 5. 28. 16:51

객체 Object 

- table <- 엔티티

- view <- 가상테이블 

- index <- 빠른 검색 

-sequence <- 자동 번호 생성 

 

만들 때, create : 제약조건 - 컬럼수준 / 테이블 수준 

변경할 때, alter

삭제할 때, delete 

 

create

create table 테이블명 ( 

컬럼명 데이터형 [ 제약들 ] , 

...

) ;

,로 컬럼을 구분 

 

char과 varchar의 차이 

ex) 'ABC'를 2번 넣을 때, 

char(5)는 사용하지 않은 공간을 비워놓고, 다음 공간을 5만큼 할당해서 저장 

varchar(5)는 사용하지 않은 공간에 연속으로 data를 저장, 공간을 효율적으로 사용할 수 있음 

검색속도는 char를 사용하는 것이 빠르다 

 

테이블을 복제할 때는 제약조건은 복제되지 않고, 테이블 구조만 복제됨 

 

alter

alter table 테이블명 

add (컬럼명 데이터형 제약, 

...

) ;  

modify() 

drop(컬럼명)

 

crud문장 

insert, select, update, delete

 

※ 전체 데이터 삭제하기 

delete from 테이블명

-> 삭제속도느림 / 복구(transaction) 지원함 ( rollback 지원 ) 

truncate table 테이블명 ; 

-> 삭제속도 빠름 / 복구(transaction) 지원 안됨 => 테이블을 처음 생성한 상태로 돌아감 ( 환경정보를 지움 ) 

 

테이블 자체를 지울때는 drop 

 

기본키 = unique + not null

unique = 유일성, only one null 

 

 

foreign key : 기본 키 테이블에 참조하는 값이 존재해야 한다. 

check : 지정된 값만 들어가야 한다 

 

DBA_XXX : 관리자 시스템 테이블 

P : 기본 키 

R : 외래 키 

C : 체크 

U : 유니크 

 

cascade :  연쇄 작용 

 

view

1. 가상의 테이블 

2. crud 실행가능 

3. 복잡한 Query -> 간단하게 ☆

4. 보안에 유리 ☆

5. from절에 있는 subquery 는 inline view 라고 부른다 

 

3에 대한 설명 ) 

create view 뷰이름 (컬1, 컬2, ...)

as 쿼리 조인문 ~~ ;      // 생성

 

select * from 뷰 ;     // 사용

 

4에 대한 설명 ) 

뷰에 제시된 컬럼에만 접근할 수 있게 됨. 

 

조인 뷰

create or replace view v_enrol1
as select sub_name, a.sub_no, stu_no, enr_grade
from enrol a, subject b
where a.sub_no = b.sub_no ;

 

인라인 뷰 : from절에 테이블 이름이 아닌, select문으로 정의된 뷰 

select stu_no, stu_name, a.stu_dept, stu_height
from student a, (select stu_dept, avg(stu_height) as avg_height
					from student
                    group by stu_dept) b
where a.stu_dept = b.stu_dept
and a.stu_height > b.avg_height ; 

 

top-n 

MySQL : limit 시, 갯 

msSQL : top 10% 

Oracle : 이런 키워드가 없음 => 서브쿼리로 만든다 

inline view( from절에서의 subquery )로 top-n을 함 

 

index

1. 목차 => 빠른 검색 

2. 기본 인덱스 => 기본 키

3. 생성시 조건과 동일하게 검색. 그렇지 않을 경우, 효과가 없다. 

4. 시간이 지나면 성능이 떨어짐 (추가, 수정, 삭제 등의 이유) => rebuild 해야한다. (갱신) 

5. DML문장이 자주 사용되는 곳에는 index하면 안됨

6. 보통 2~3% 정도 검색일 때 효과 ( 15~20% 검색일 때는 효과없음 => 검색량이 너무 많을 때 효과 없다 ) 

 

ex) id와 pwd를 동시에 검색할 때 index사용

Comments