본문 바로가기
oracle/[SQL] SQL

6장. DDL

by #moonyz 2014. 10. 2.

DDL(Data Definition Language) : CREATE(생성), ALTER(수정), TRUNCATE(잘라내기), DROP(삭제)


DML(Data manipulation Language) : INSERT(입력), UPDATE(변경), DELETE (삭제), MERGE(병합) 

-- 데이터를 관리하는 명령어


DCL(Data Control Language) : GRANT(권한주기), REVOKE(권한뺏기)


TCL(Transaction Control Language) : COMMIT(확정), ROLLBACK(취소)




1. CREATE 

- 사용자가 값을 입력하지 않을 경우 기본적으로 null 값이 자동으로 입력

- 사용자가 값을 입력하지 않을 경우 null값 외에 다른 특정한 값을 지정 : default


<제한사항>

- 테이블이름 또는 컬럼이름은 한글로 사용가능(but 불편함)

- 테이블이름은  반드시 문자로. 숫자사용가능(but 숫자로 시작 NO)

- 특수문자로 가능하지만 " " 로 묶어야 함. 권장하지 않음 

- 테이블이름 또는 컬럼이름은 최대 30byte까지 가능 (한글로 테이블 생성할 경우 15글자 까지)

- 오라클이 사용하는 키워드를 사용하지 않기를 권장


1. 테이블 생성하기


2. 기본값을 설정하면서 생성하기



# Global Temporary Table 생성하기

- Redo log를 생성하지 않는다.

- index, view, trigger를 생성할 수 있으나 전부 temporary

- 이 테이블에 들어있는 데이터는 이전이나 백업을 할 수 없다

1. glboal temporary table 생성하기

- ON COMMIT delete ROWS --commit 시에 테이터를 삭제한다는 뜻(default)

- ON COMMIT preserve ROWS --세션이 종료해야 데이터가 사라진다는 뜻




2. global  temporary table 생성 후 조회

같은 계정이라 할지라도 다른 터미널에서는 조회 불가능

- 같은 계정이라 할지라도 다른 창에서는 다른사람이 어떤 작업을 하는지 알수 없음



3. commit 후 삭제 확인



# 테이블 복사하기 (CTAS)

1. 모든 컬럼 다 복사하기



2. 특정 컬럼만 복사하기



3. 테이블 구조(컬럼)만 가져오고 데이터 안 가져오기



# 가상컬럼테이블 생성하기

- 11g부터 추가된 기능

step 1. 가상 컬럼을 가지는 vt001 테이블생성

step 2. vt001 테이블에 데이터 입력

- 가상 컬럼에 데이터를 입력할 경우 오류남 (no3=no1+no2)

- no1, no2 에만 데이터 입력 insert into vt001(no1, no2) values(1,2)

step 3. 입력된 데이터 조회

- no3에는 데이터를 입력하지 않았지만 자동으로 계산된 식의 값으로 입력됨


step 4. 기존 값을 변경 한 후 가상 컬럼에 반영되는 지 확인

- vt001 테이블의 no1 값을 변경

- vt001 테이블 조회시 no3(no1+no2) 값이 변경됨을 알수 있다.



step 5. 새로운 가상 컬럼 추가

- 새로운 가상 컬럼 no4 추가 시 즉시 값이 반영되어 생성됨


step 6. 가상 컬럼 내역 조회

- 테이블 명 : user_tab_columns


step 7. 조건절을 활용한 가상 컬럼 생성하기





2. ALTER

- 만들어져 있는 오브젝트를 수정(변경)하는 명령어

- 컬럼 삭제, 컬럼 이름이나 테이블 이름 변경 등

- 부하가 많이 걸리는 명령어이므로 사용량이 많은 시간에 수행하는 것은 위험하다.


EX1. 새로운 컬럼 추가



EX2. 컬럼 추가하기 :  ALTER TABLE [테이블명] ADD (컬럼명, 컬럼형식)


--기본값 지정하여 컬럼 추가하기



EX3. 컬럼 이름 변경하기 : ALTER TABLE [테이블명] RENAME [컬럼명] TO [변경할 컬럼명]



EX4. 컬럼 데이터 크기 변경하기 : ALTER TABLE [테이블명] MODIFY (컬럼명, 형식)

SQL> DESC dept6


SQL> ALTER  TALBE  dept6  MODIFY  (dcode, varchar2(10))



EX5. 컬럼 삭제하기 :  ALTER TABLE [테이블명] DROP COLUMN [컬럼명]

--참조키로 설정되어있을 경우 삭제시 에러남 >> cascade constraints 조건 추가



참고) 테이블이름 변경하려면?  RENAME [기존 테이블명] TO [변경할 테이블명]



EX6. 읽기 전용 테이블로 변경하기 (11g 추가) 


 ALTER TABLE [테이블명] READ ONLY   --읽기전용모드

- 데이터입력 안됨 : insert into [테이블명] values(컬럼값, ...)

- 컬럼추가 안됨 : alter table [테이블명] add (컬럼명, ...)

- 읽기 전용 테이블은 읽기전용 상태일 때 삭제가능 : drop table [테이블명]


② ALTER TABLE [테이블명] READ WRITE   -- 읽기/쓰기모드



* 테이블이 읽기 전용인지 조회 하려면? 

테이블명 : USER_TABLES





3. TRUNCATE

- 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납하는 명령어

테이블 자체는 지워지지 않음

- TRUNCATE TABLE [테이블명]





4. DROP

     - 테이블 자체를 삭제하는 명령어, 해당 테이블에 생성되어 있던 인덱스도 삭제

- DROP TABLE [테이블명]



※ 10g 부터는 drop으로 삭제할 경우 테이블이 삭제되는 것이 아니라 테이블이름이 BIN$... 로 변경됨 (윈도우의 휴지통처럼)

-> FLASHBACK TABLE 기능을 구현하기 위함 (오라클 백업과 복구 참조)



delete  : 데이터 삭제, 쓰고있던 디스크상의 공간은 그대로 가지고 있음

truncate  : 데이터 삭제, 공간 반납, 테이블 자체는 지워지지 않음, 인덱스도 함께 truncate

drop  : 테이블 전체를 삭제. 사용하고 있던 공간, 인덱스, 제약조건등 삭제






데이터 딕셔너리 (Data Dictionary)


1. 데이터 딕셔너리

- 데이터 베이스를 운영하기 위한 정보들을 특정한 곳에 모아두고 관리

- Base Table 과 Data Dictionary View

- Base Table은 DBA라 할지라도 접근을 못하게 막아둔다

- 사용자들은(DBA포함) Data Dictionary View를 통해서만 딕셔너리에 접근가능


오라클 데이터베이스의 메모리 구조와 파일에 대한 구조 정보들

각 오브젝트들이 사용하고 있는 공간들의 정보들

제약 조건 정보들

사용자에 대한 정보들

권한이나 프로파일, 롤에 대한 정보들

감사(Audit)에 대한 정보들




2. Data Dictionary View 종류


① Static Dictionary

- 내용들이 자동으로 변경되지 않고 수동으로 변경작업을 해 주어야 함 

- USER_tables : 사용자가 생성한 오브젝트들만 조회 할수 있음

- ALL_tables : 해당 사용자가 생성한 오브젝트를 포함하여 해당 사용자가 접근 가능한 모든 오브젝트 조회가능

- DBA_tables : 데이터베이스 내의 거의 모든 오브젝트들을 다 볼수있음. DBA권한을 가진 사람만 조회가능


② Dynamic Dictionary

- 접두어가 V$로 시작하는 테이블들





'oracle > [SQL] SQL' 카테고리의 다른 글

8장. 제약조건  (0) 2014.10.06
7장. DML  (0) 2014.10.06
5장. JOIN  (0) 2014.10.02
4장. 복수행 함수 (그룹함수)  (0) 2014.10.01
3장. 정규식함수  (0) 2014.09.30

댓글