[oracle] DDL - 데이터 정의

재현·2024년 6월 16일
0
post-thumbnail

🔍 DDL (Data Definition Language): 데이터 정의 언어

✍ 테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할을 담당한다.

용어설명
CREATE테이블을 생성
ALTER 테이블의 구조를 수정
DROP테이블을 삭제
RENAME테이블의 이름을 변경
TRUNCATE테이블을 초기화

🔍 CREATE

✍ CREATE 명령어는 데이터베이스 객체를 생성하는 데 사용되며, 이 명령어를 사용하여 테이블, 인덱스, 뷰, 스키마 등을 만들 수 있다.

-- DDL
-- CREATE
CREATE TABLE DEPT (
    DEPTNO NUMBER(2), 
    DNAME VARCHAR2(14),
    LOC VARCHAR2(13)
);

SELECT * FROM DEPT;

-- CTAS
CREATE TABLE EMP2 AS SELECT * FROM EMPLOYEES;

CREATE TABLE EMP3 AS SELECT * FROM EMPLOYEES WHERE 1=2;

-- ALTER ADD
CREATE TABLE EMP_DEPT50 
AS SELECT EMPLOYEE_ID, FIRST_NAME, SALARY * 12 AS ANN_SAL, HIRE_DATE
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 50;

🔍 ALTER

✍ ALTER 명령어는 기존의 데이터베이스 객체를 변경하는 데 사용되며, 테이블의 구조를 수정하거나 인덱스, 뷰 등을 변경할 때 사용된다.

-- 컬럼 추가 
ALTER TABLE EMP_DEPT50
ADD (JOB VARCHAR2(10));

-- 테이블 구조 확인
DESC EMP_DEPT50;

-- 컬럼 이름 변경 (JOB -> JOB_ID)
ALTER TABLE EMP_DEPT50
RENAME COLUMN JOB TO JOB_ID;

-- 컬럼 수정, 기존의 데이터를 손상되게 크기를 조정할 순 없다.
-- FIRST_NAME의 길이가 VARCHAR(20)에서 30으로 늘어났다.
ALTER TABLE EMP_DEPT50
MODIFY (FIRST_NAME VARCHAR(30));

-- FIRST_NAME의 가장 긴 길이가 8바이트로 나온다.
SELECT MAX(LENGTHB(FIRST_NAME)) FROM EMP_DEPT50;

-- 그 보다 더 작은 길이로 줄이려 해 ERROR 발생
ALTER TABLE EMP_DEPT50
MODIFY (FIRST_NAME VARCHAR(7));

🔍 DROP

✍ DROP 명령어는 데이터베이스 객체를 삭제하는 데 사용. 이 명령어는 테이블, 인덱스, 뷰 등을 삭제할 수 있으며, 삭제된 객체는 복구할 수 없다.

-- 열 삭제
ALTER TABLE EMP_DEPT50
DROP COLUMN JOB_ID;

-- JOB_ID가 삭제된 것을 볼 수 있다.
DESC EMP_DEPT50;

🔍 RENAME

✍ RENAME 명령어는 데이터베이스 객체의 이름을 변경하는 데 사용. 이 명령어를 사용하여 테이블, 인덱스, 뷰 등의 이름을 변경할 수 있다.

-- 테이블 이름 변경
RENAME EMP_DEPT50 TO EMPLOYEES_DEPT50;

-- 조회되지 않는다.
SELECT * FROM EMP_DEPT50;

DROP TABLE EMPLOYEES_DEPT50;

DESC EMPLOYEES_DEPT50;

🔍 TRUNCATE

✍ TRUNCATE 명령어는 테이블의 모든 데이터를 빠르고 효율적으로 삭제하는 데 사용된다. DELETE와 달리, TRUNCATE는 데이터만 제거하고 테이블의 구조는 유지. 또한, TRUNCATE는 일반적으로 롤백할 수 없다.

-- TRUNCATE = 테이블의 데이터는 모두 삭제하고 구조는 남긴다.
TRUNCATE TABLE EMP2;

SELECT * FROM EMP2;

DESC EMP2;

🔍 SET UNUSED

✍ SET UNUSED 명령어는 테이블의 컬럼을 논리적으로 비활성화한다. 즉, 이 컬럼은 더 이상 쿼리 결과에 나타나지 않고, 새로운 데이터도 입력되지 않지만, 물리적으로 식제하려면 따로 DROP UNUSED COLUMNS를 사용하여 삭제해야한다.

-- SET UNUSED = 하나 이상의 열을 "사용되지 않았음"을 표시
ALTER TABLE EMP_DEPT50
SET UNUSED (FIRST_NAME);

-- FIRST_NAME 컬럼이 보이지 않 는다.
DESC EMP_DEPT50;

-- FIRST_NAME 컬럼이 보이지 않는다.
SELECT * FROM EMP_DEPT50;

-- UNUSED된 컬럼들을 삭제한다.
ALTER TABLE EMP_DEPT50
DROP UNUSED COLUMNS;

📖 reference

인프런 오라클 데이터베이스

profile
운동과 코딩

0개의 댓글