javaboiii의 DataBase/DB 요약정리(Do it! 오라클 데이터베이스)

DB -12) 데이터 정의어

javaboiii 2024. 7. 31. 09:06

DataBase

12-1. 객체를 생성, 변경, 삭제하는 데이터 정의어

데이터 정의어(DDL : Data Definition Language)는 데이터베이스 데이터를 보관하고 관리하기 위해 제공되는

여러 객체(Object)의 생성/변경/삭제 관련 기능을 수행합니다.

데이터 정의어를 사용할 때 유의점

데이터 정의어는 데이터 조작어(DML)와 달리 명령어를 수행하자마자 데이터베이스에 수행한 내용이 바로 반영되는

특성이 있습니다. 즉 데이터 정의어를 실행하면 자동으로 COMMIT되기 때문에 이전에 사용한 데이터 조작어는 영구히

데이터베이스에 반영됩니다. 이는 ROLLBACK을 통한 실행 취소가 불가하다는 것을 의미하기 때문에 사용할 때 주의를

기울여야 합니다.

 

데이터 정의어는 객체를 생성하는 CREATE, 이미 생성된 객체를 변경하는 ALTER, 객체를 삭제하는 DROP 등의 명령어로

이루어져 있습니다.

12-2. 테이블을 생성하는 CREATE

CREATE문은 오라클 데이터베이스 객체를 생성하는 데 사용하는 명령어 입니다. 

테이블을 생성한 CREATE TABLE 명령어가 대표적인 데이터 정의어 입니다.

CREATE TABLE 테이블명(
	열1 이름 열1 자료형,
    열2 이름 열2 자료형,
    ...
    열N 이름 열N 자료형
);

 

생성할 테이블 이름은 반드시 다음 규칙대로 지정해 주어야 합니다.

[테이블 이름 생성 규칙]

1. 테이블 이름은 문자로 시작해야 한다(한글도 가능하며 숫자로 시작할 수 없음)

2. 테이블 이름은 30byte 이하여야 한다(즉 영어는 30자, 한글은 15자까지 사용 가능)

3. 같은 사용자 소유의 테이블 이름은 중복될 수 없다.(어떤 계정에 이름이 같은 테이블은 존재할 수 없음)

4. 테이블 이름은 영문자(한글 가능), 숫자(0-9)와 특수 문자 $, #, _ 를 사용할 수 있다

5. SQL 키워드는 테이블 이름으로 사용할 수 없다(SELECT, FROM 등은 테이블 이름으로 사용 불가)

 

테이블 이름과 마찬가지로 열 이름에도 규칙이 있습니다. 테이블 이름 지정 규칙과 크게 다르지 않습니다.

[열 이름 생성 규칙]

1. 열 이름은 문자로 시작해야 한다.

2. 열 이름은 30byte 이하여야 한다.

3. 한 테이블의 열 이름은 중복될 수 없다(같은 이름의 열이 두개 존재할 수없음)

4. 열 이름은 영문자(한글 가능), 숫자(0-9)와 특수 문자 $, #, _ 를 사용할 수 있다.

5. SQL 키워드는 열 이름으로 사용할 수 없다.

 

기존 테이블 열 구조 전체와 일부 데이터를 복사하여 새 테이블을 만들 수 있습니다.

CREATE문에 서브쿼리를 사용하면 기존 테이블의 열 구조를 복사하여 새 테이블을 만들 수 있습니다.

12-3. 테이블을 변경하는 ALTER

ALTER 명령어는 이미 생성된 오라클 데이터베이스 객체를 변경할 때 사용합니다. 테이블에 새 열을 추가 또는 삭제하거나 열의 자료형 또는 길이를 변경하는 등 테이블 구조 변경과 관련된 기능을 수행합니다.

 

키워드 설명
ADD 추가할 열 이름과 자료형을 명시하면 테이블에 새 열을 추가할 수 있습니다.
RENAME 테이블의 열 이름을 변경할 수 있습니다.
MODIFY 테이블의 특정 열의 자료형이나 길이를 변경할 때 사용합니다.
DROP 테이블의 특정 열을 삭제할 때 사용합니다.

12-4. 테이블 이름을 변경하는 RENAME

테이블 이름을 변경할 때는 RENAME 명령어를 사용합니다.

RENAME 기존테이블명 TO 새 테이블명;

이름을 변경한 후에는 기존 테이블명을 사용할 수 없습니다.

12-5. 테이블의 데이터를 삭제하는 TRUNCATE

TRUNCATE 명령어는 특정 테이블의 모든 데이터를 삭제합니다. 데이터만 삭제하므로 테이블 구조에는 영향을 주지 않습니다. 테이블의 데이터 삭제는 데이터 조작어 중 WHERE절을 명시하지 않은 DELETE무의 수행으로도 가능합니다.

하지만 TRUNCATE는 데이터 정의어이기 때문에 ROLLBACK이 되지 않는다는 점에서 DELETE문과 다릅니다.

12-6. 테이블을 삭제하는 DROP

DROP 명령어는 데이터베이스 객체를 삭제하는 데 사용합니다. 테이블이 삭제되므로 테이블에 저장된 데이터도 모두 삭제 됩니다.

DROP TABLE 테이블명;

DROP 명령어 역시 데이터 정의어이므로 ROLLBACK 명령어로 테이블 삭제 수행을 취소할  수 없습니다. 하지만

오라클 10g부터터는 윈도우의 휴지통 기능과 같은 FLASHBACK 기능을 사용하여 DROP 명령어로 삭제된 테이블을 복구할 수 있는데

상황에 따라서 유용하게 사용할 수 있으므로 필요할 때 인터넷 검색을 통해 사용법을 참고합시다.

잊기전에 한 번 더

Q1. 다음 열 구조를 가지는 EMP_HW 테이블을 만들어 보세요.

CREATE TABLE EMP_HW(
    EMPNO NUMBER(4),
    ENAME VARCHAR2(10),
    JOB VARCHAR2(9),
    MGR NUBER(4),
    HIREDATE DATE,
    SAL NUMBER(7,2),
    COMM NUMBER(7,2),
    DEPTNO NUMBER(2),
);

Q2. EMP_HW 테이블에 BIGO 열을 추가해 보세요. BIGO 열의 자료형은 가변형 문자열이고, 길이는 20입니다.

ALTER TABLE EMP_HW
ADD BIGO VARCHAR2(20);

Q3. EMP_HW 테이블의 BIGO 열 크기를 30으로 변경해 보세요.

ALTER TABLE EMP_HW
MODIFY BIGO VARCHAR2(30);

Q4. EMP_HW 테이블의 BIGO 열 이름을 REMARK로 변경해 보세요.

ALTER TABLE EMP_HW
RENAME COLUMN BIGO TO REMARK;

Q5. EMP_HW 테이블에 EMP 테이블의 데이터를 모두 저장해 보세요. 단 REMARK 열은 NULL로 삽입합니다.

CREATE TABLE EMP_HW
	AS SELECT * FROM EMP;

Q6. 지금까지 사용한 EMP_HW 테이블을 삭제해 보세요.

DROP TABLE EMP_HW;