본문 바로가기

Database/Oracle

데이터 정의어 [DDL] 의 활용

DDL => 구조를 가지고 있는 언어.  (객체 ) 를 생성, 삭제 하는 언어

 

 

『 데이터 베이스 객체 』

 

테이블 : 데이터를 저장하는 기본단위, 행 열로 구성

뷰 : 데이터의 액세스를 제한하기 위해 사용

시퀀스 : 숫자 값 생성기 [중복이 되지 않는 고유 번호를 생성하여 줌]

인덱스 : 질의의 성능을 향상시키기 위한 객체

동의어 : 객체에 다른 이름을 제공함. [ Employees -> emp  동의어 ] 

 

 

『 데이터 유형 』

 

VARCHAR(길이) : Variable Character, 가변 길이 문자 데이터 [길이 만큼 할당해놓고 저장공간 자연스럽게 할당] ->저장공간

CHAR(길이): Character, 고정 길이 문자 데이터 [길이 만큼의 공간을 만들어놓고,사용 공간 이후의 공간 할당불가]->성능

NUMBER(p,s) : 가변 길이 숫자 데이터/ (p,2)는 소수점 2자리까지 표현하여라.

DATE: 날짜 및 시간 값  [언어(한국어,영어) 등에 대한 표기가 모두 다름], 시차문제도 똑같이 존재.

 

예를들어, CHAR(100) 인데, 20개의 공간만을 쓴다면... 80개의 공간이 낭비된다... 이 컬럼의 행의 수가 불어날 경우

심각한 공간 낭비가 된다.

 

TIMESTAMP 데이터 유형은, 년/월/일/시간/분/초 까지 포함하는 날짜를 보여줌.

 

 

【 테이블 】

 

테이블의 규칙

○ 문자로 시작하여야 함

○ 1자부터 30자까지 가능

○ A-Z, a-z, 0-9, _, $, # 만 허용

○ 동일한 사용자가 소유한 다른 객체의 이름과 중복되지 않아야 함

○ Oracle server 의 예약어가 아니어야 함.

 

 

【 테이블 생성 】

 

create table [테이블명] (컬럼명, 데이터타입[길이])

 

 

dept 테이블을 생성하고, 테이블에 insert 절을 통해 넣은 데이터를

조회한 결과이다.

 

Create 문에 서브쿼리를 사용할 수 있다.

 

서브쿼리에서 반환된 결과를 Create Table한다.

 

이것은 빠르게 데이터를 가져올 수 있다는 장점이 있다.

 

 

 

이와 비슷한 방법으로 insert문에 서브쿼리를 사용해서 조건에 만족하는 테이블들을 삽입하는 방법이 있다.

 

truncate 문은 해당 테이블안에 있는 모든 데이터를 삭제한다.

 

 

 

 

【 테이블 수정 】

 

alter table [테이블명] [add, modify]   (column 데이터타입 [Default expr]

 

alter table [테이블명] [drop] 

 

컬럼의 추가는 항상 맨 마지막에 생성됨[열]

 

 

alter문을 통해 varchar2(9)의 job_id를 추가 하였다, 기존 테이블 내 칼럼에 들어있던 값에는 null이 자동으로 지정된다.

 

이렇게 insert문은, 기존 행에 데이터가 있을 경우, 맨 마지막열에 데이터를 추가하는데

이 경우에는 insert문이 아닌 update문을 통해 수정을 하여야한다.

 

 

 

 

 

 

 

기존 저장된 데이터의 데이터타입과 맞지 않는 유형의 데이터 타입을 지정하거나,

길이가 맞지 않을 경우 오류가 발생한다. 

 

 

 

drop 을 이용해 job_id 컬럼을 삭제함.

 

 

 

DDL 명령어는 기존 행에 락을 거는 DML 명령어와 달리

테이블 전체에 락을 걸게 됨. ( 이 테이블 자체에 작업 불가 ) => 동시성이 떨어짐.

 

drop 은 data만 제거되는 것이 아닌, colum의 구조정보, 저장공간도 같이 삭제 되어버림.

 

따라서 Drop 이 아닌 Set Unused 명령어를 사용

데이터 딕셔너리에는 기본적으로 Used 상태로, 해당 컬럼 정보가 저장되는데

이를 Unused 로 바꿈으로써, 사용하지 않음 상태로 설정을 하므로 저장공간과 구조정보를 그대로 유지 할 수 있음.

그리고 락이 걸리지 않는 방법으로 동시성이 높음.

 

단, 공간이 남아있게 되는데 이를

 

 drop unused columns 를 통해 지우게 되면, 동시성을 확보하면서 컬럼을 삭제할 수 있음.

 

 

 

drop 문은 참조대상인 테이블이 있는경우, 사용할 수 없다. (Cascade 옵션을 넣어야 함)

 

 

 

 

 

 

정리하면 

 

Delete -> DML, 데이터 삭제, 공간은 남음, Rollback 복구가능

truncate -> DDL, 데이터 삭제, 테이블 구조공간 남음, 데이터 저장 공간 삭제, Rollback 복구 불가

drop -> DDL, 데이터, 테이블구조 삭제, 테이블 구조, 저장공간 전부 삭제, Rollback 복구 불가

 

truncate, drop 는 백업본 존재시 복구 가능함.

delete => 행단위 삭제

truncate => 모두 삭제

 

 

update =  delete+insert 작업 임.

 

 

 

 

 

 

'Database > Oracle' 카테고리의 다른 글

뷰(view)  (0) 2021.01.06
제약 조건 설정  (0) 2021.01.06
데이터 조작어 [DML] 와 트랜잭션  (0) 2021.01.05
Select 문 -3 (join)  (0) 2020.12.31
Select문 -2  (0) 2020.12.30