오라클 DB(sql)_기초 17 (DDL)

데이터베이스 2021. 5. 1. 19:58

DDL ; Data Definition Language
:
데이터 베이스의 구조(객체) 생성, 수정, 삭제 하는 명령어
 

**데이터베이스 객체

 

<테이블 이름 지정 규칙>

  • 문자로 시작.
  • 1~30자로 생성 가능
  • A-Z, a-z, 0-9, $, _, # 포함해야 .
  • 동일 사용자가 소유한 다른 객체의 이름과 중복되지 않아야 .
  • 오라클 서버의 예약어가 아니어야 .

<Default>옵션

: 삽입을 수행할 사용할 열의 기본값 지정. 널값이 입력되는것을 방지함.

 

<태이블 생성>

  • 테이블이름, 행이름, 들어갈 자료형, 문자 길이 필요

 

  • 사용자 테이블 : 사용자가 만든 데이터가 저장된 테이블
  • 데이터 딕셔너리: 스키마가 저장된 데이터 테이블; DMBS자체가 관리하는 것이므로 접근하여 조작할수가 없음.
    User_table:
    내가 소유한 테이블만, all~_table: 내가가진것과 접근할 있는 테이블, dba_table: db안에 있는 모든 테이블을 있음. V$ 테이블의 성능을 보여줌.

 

  • 데이터 유형

 : CHAR 경우 먼저 메모리를 할당해서 할당된 공간에다가 데이터를 저장함. 미리 지정해놓은 공간은 다른데이터로 사용할 없음. VARCHAR2 경우 그때그때 들어오는 데이터의 사이즈에 따라 공간을 할당함. 성능을 우선시하는 경우 CHAR, 공간배분이 중요한 프로그램의 경우는 VARCHAR2 사용할 있음. 공간배분에 많은 디스크조각이 발생해 성능이 떨어지게 . VARCHAR2 VARCHAR 성능적인 측면을 개선한 데이터 형임.

 

: 숫자를 저장하는 데이터 , number(양수와 음수 모두 사용), number(p)(양수만 사용할 있음, number(p,s)(p개의 자릿수를 쓰며 소수 s번재 자리까지 표시 가능)

 

DATE : 날짜값 저장할 사용, 날짜포맷은 운영체제의 언어체계를 따라감. 일만 보여줌

<DateTime 데이터 유형>

  • Timestamp : 시간 까지 전부다 기록할 있음.

ROWID ; INDEX 사용하는 데이터 타입

 

<서브쿼리를 사용한 데이터 생성>

  • 서브쿼리의 결과가 그대로 테이블 .
     

    : 컬럼이름, 데이터 타입, 길이, PK, FK 모두를 가져옴

 

(예제) 부서별 평균급여를 나타내는 deptavg 테이블을 생성하시오.

  • 만일 alias 쓰지않고 avg(salary) 경우에 avg(프로그램 예약어) ()(문자)때문에 column명으로 쓸수 없음

 

<Alter table>

Add >> column 추가

Modify >> 데이터 타입이나 길이(자리수) 변경(줄이거나 늘리거나)

Drop >> column 삭제

 

  • Add명령어로 컬럼을 추가한 경우 초기 컬럼의 데이터값은 null값이 .
  • 새로 추가된 column 값을 추가하고 싶을 때는
     
  • INSERT 사용하였을때는 행이 추가되어 나머지값에 null 입력됨.

Update명령어를 사용하여 해당값에 값을 부여해 주어야 .

 

  • Modify 명령어로 데이터 사이즈를 줄일 , 기존 입력된 데이터보다 작게는 줄일 없음
    입력된 형태와 다른 자료형과 크기로는 modify로는 변경할 없음. 수정하고자 할때는 데이터에 입력된 값을 전부 삭제 후에 수정해야 .

 

  • Drop 이라는 명령어가 수행되면, column 삭제되고 관련된 구조, 데이터 삭제, 저장공간도 함께 삭제가 . 데이터 딕셔너리의 모든것을 삭제함. 공간이 삭제되는 매커니즘이 발생해서 시간이 오래 걸리는 특징을 가지게 .
    **DDL연산은 auto-commit 있기때문에 lock타임이 DML연산에 비해 짧은 편임., table 전체에 lock작업이 진행되고. 테이블 크기가 크고 테이블 전체를 드랍하는 경우에 lock타임이 길어져 동시성이 떨어지게 .


 

  • 데이터 베이스에서 컬럼이 사용되면 used 상태로 되는데 unused 상태로 변경해서 값을 숨기게 . Unused 명령어는 used에서 unused상태로 변경하는 것이기 때문에 drop보다는 속도가 빠름. Drop과는 다르게 데이터,구조, 공간은 그대로 남아있고 인식만 못하는 상태.
    다시 used 싱테로 변경해서 기존 데이터를 변경할 없음.

 

  • Drop unused라는 명령어를 이용해서 unused 상태 모든 컬럼을 지워줌. DDL명령어와는 별개로 진행되는 과정임.

 

  • Truncate table >> 테이블에서 모든 행을 제거함.
     
  • (요약)
     

 

 

 

 

admin