2-3-3. DDL

박은서's avatar
Mar 02, 2026
2-3-3. DDL
💡
DDL (데이터 정의어, Data Definition Language)

1. CREATE TABLE

1️⃣ DDL 명령어 기초 개념

1) DDL (Data Definition Language)

  • 데이터베이스에서 테이블, 인덱스, 뷰, 스키마 등 데이터베이스 객체를 정의하고 관리하기 위한 SQL 명령어들의 집합
  • DDL을 통해 데이터베이스의 구조를 생성, 수정, 삭제할 수 있음
  • 주로 데이터베이스 관리자(DBA)나 개발자가 데이터베이스의 구조 설계하고 관리할 때 사용

2️⃣ DDL 명령어의 특징

1) 자동 커밋

  • 대부분의 DDL 명령어는 실행 후 자동 커밋
    • → ROLLBACK 불가능
      즉, 실행된 DDL 명령어는 취소할 수 없음

2) 데이터 정의

  • DDL 명령어는 데이터 자체가 아닌 데이터 구조를 정의하고 변경
  • 데이터베이스의 스키마를 설계하거나 유지 보수하는 데 주로 사용됨

3) 데이터 무결성 보장

  • DDL 명령어 통해 테이블과 데이터베이스 객체를 정의할 때 제약 조건을 설정하여 데이터 무결성 보장 가능
  • 예) PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL 등의 제약 조건을 사용하여 데이터의 일관성 유지할 수 있음

3️⃣ CREATE TABLE

1) CREATE TABLE

  • 데이터베이스에 새로운 테이블을 생성하는 SQL 명령어
  • 테이블의 이름, 칼럼(column), 데이터 타입, 제약 조건 등 정의할 수 있음

2) CREATE TABLE 형식

CREATE TABLE 테이블명 ( 칼럼1 데이터타입 [제약조건], 칼럼2 데이터타입 [제약조건], ... );

3) CREATE TABLE 예

CREATE TABLE STUDENT ( STUDENT_ID NUMBER(5) PRIMARY KEY, NAME VARCHAR2(50) NOT NULL, AGE NUMBER(3), ENROLL_DATE DATE DEFAULT SYSDATE, DEPT_ID NUMBER(3) REFERENCES DEPARTMENT(DEPT_ID) );

4️⃣ 참조 무결성 유지를 위한 CREATE TABLE 옵션

1) 참조 무결성(Referential Integrity)

  • 데이터베이스에서 두 테이블 간의 관계를 정의하고, 데이터의 일관성을 유지하기 위해 사용하는 제약 조건
  • 외래 키(Foreign Key)를 통해 정의됨
  • 한 테이블의 칼럼이 다른 테이블의 기본 키(Primary Key)나 고유 키(Unique Key)를 참조하도록 함

2) CREATE TABLE 옵션

  • CASCADE
    • 부모 테이블의 행이 삭제되거나 업데이트될 때 자식 테이블의 해당 외래 키를 참조하는 행들도 자동으로 삭제되거나 업데이트 됨
    • 이 옵션은 외래 키에 ON DELETE CASCADE 또는 ON UPDATE CASCADE와 함께 사용됨
    • CREATE TABLE CHILD_TABLE_CASCADE ( CHILD_ID NUMBER PRIMARY KEY, PARENT_ID NUMBER, CONSTRAINT FK_PARENT_CASCADE FOREIGN KEY (PARENT_ID) REFERENCES PARENT_TABLE (PARENT_ID) ON DELETE CASCADE );
  • SET NULL
    • 부모 테이블에서 행이 삭제되면 자식 테이블의 해당 외래 키가 NULL로 설정됨
    • CREATE TABLE CHILD_TABLE_CASCADE ( CHILD_ID NUMBER PRIMARY KEY, PARENT_ID NUMBER, CONSTRAINT FK_PARENT_CASCADE FOREIGN KEY (PARENT_ID) REFERENCES PARENT_TABLE (PARENT_ID) ON DELETE SET NULL );
  • SET DEFAULT
    • 부모 테이블에서 행이 삭제되면 자식 테이블의 해당 외래 키가 기본값으로 설정됨
    • CREATE TABLE CHILD_TABLE_CASCADE ( CHILD_ID NUMBER PRIMARY KEY, PARENT_ID NUMBER, CONSTRAINT FK_PARENT_CASCADE FOREIGN KEY (PARENT_ID) REFERENCES PARENT_TABLE (PARENT_ID) ON DELETE SET DEFAULT );
  • NO ACTION
    • 부모 테이블에서 행이 삭제되거나 업데이트될 때 자식 테이블의 외래 키는 아무런 작업도 수행되지 않음
    • 자식 테이블에서 참조 중인 부모 테이블의 행을 삭제하려고 하면 오류 발생
    • CREATE TABLE CHILD_TABLE_CASCADE ( CHILD_ID NUMBER PRIMARY KEY, PARENT_ID NUMBER, CONSTRAINT FK_PARENT_CASCADE FOREIGN KEY (PARENT_ID) REFERENCES PARENT_TABLE (PARENT_ID) ON DELETE NO ACTION );
  • RESTRICT
    • 부모 테이블에서 행이 삭제되거나 업데이트될 때 자식 테이블의 외래 키는 아무런 작업도 수행되지 않음
    • 부모 테이블의 행이 참조 중이면 삭제할 수 없음
    • NO ACTION과 유사
    • CREATE TABLE CHILD_TABLE_CASCADE ( CHILD_ID NUMBER PRIMARY KEY, PARENT_ID NUMBER, CONSTRAINT FK_PARENT_CASCADE FOREIGN KEY (PARENT_ID) REFERENCES PARENT_TABLE (PARENT_ID) ON DELETE RESTRICT );

2. ALTER TABLE

1️⃣ ALTER TABLE 명령어 기초 개념

1) ALTER TABLE 명령어

  • 데이터베이스에서 기존 테이블의 구조를 수정할 때 사용하는 SQL 명령어
  • 테이블에 칼럼을 추가하거나 삭제하고, 칼럼의 데이터 타입을 변경하거나, 제약 조건을 추가 또는 제거하는 작업 가능

2️⃣ ALTER TABLE 명령어의 종류

1) 칼럼 추가(ADD COLUMN)

  • 기능
    • 테이블에 새로운 칼럼을 추가할 대 사용
    • 새로 추가된 칼럼은 기본적으로 NULL값을 가짐 (기본값 지정 가능)
    • 제약 조건 생략 가능
    • NULL값이 오면 안 되는 경우 제약 조건에 ‘NOT NULL’을 지정할 수 있으며,
      • NULL 값이 와도 되는 경우에는 생략 가능
  • 형식
    • ALTER TABLE 테이블명 ADD 칼럼명 데이터타입 [제약조건];
  • 예시
    • ALTER TABLE EMPLOYEE ADD PHONE_NUMBER VARCHAR(15) NOT NULL;

2) 칼럼 삭제(DROP COLUMN)

  • 기능
    • 테이블에서 특정 칼럼 삭제할 때 사용
    • 칼럼 삭제 → 칼럼에 저장된 모든 데이터 삭제 → 복구 불가
  • 형식
    • ALTER TABLE 테이블명 DROP COLUMN 칼럼명;
  • 예시
    • ALTER TABLE EMPLOYEE DROP COLUMN PHONE_NUMBER;

3) 칼럼명 변경(RENAME COLUMN)

  • 기능
    • 테이블에서 특정 칼럼의 이름 변경할 때 사용
    • 일부 DBMS에서만 지원
  • 형식
    • ALTER TABLE 테이블명 RENAME COLUMN 기존칼럼명 TO 새로운칼럼명;
  • 예시
    • ALTER TABLE EMPLOYEE RENAME COLUMN NAME TO FULL_NAME;

4) 칼럼 데이터 타입 변경(MODIFY COLUMN)

  • 기능
    • 테이블에서 특정 칼럼의 데이터 타입을 변경할 때 사용
    • 데이터가 새로운 데이터 타입으로 변환될 수 있는 경우에만 성공
  • 형식
    • ALTER TABLE 테이블명 MODIFY 칼럼명 새로운데이터타입;
  • 예시
    • ALTER TABLE EMPLOYEE MODIFY SALARY NUMBER(10,2);

5) 제약 조건 추가(ADD CONSTRAINT)

  • 기능
    • 테이블에 새로운 제약 조건을 추가할 때 사용
    • 제약 조건 추가 → 데이터 무결성 보장 가능
  • 형식
    • ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
  • 예시
    • ALTER TABLE EMPLOYEE ADD CONSTRAINT CHK_SALARY CHECK (SALARY > 0);

6) 제약 조건 삭제(DROP CONSTRAINT)

  • 기능
    • 테이블에서 기존에 정의된 제약 조건을 제거할 때 사용
    • 제약 조건 제거 → 해당 제약 조건에 의해 보호되던 데이터 무결성이 더 이상 보장되지 않음
  • 형식
    • ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
  • 예시
    • ALTER TABLE EMPLOYEE DROP CONSTRAINT CHK_SALARY;

7) 기본값 설정/변경(SET DEFAULT)

  • 기능
    • 테이블에서 특정 칼럼의 기본값을 설정하거나 변경할 때 사용
  • 형식
    • ALTER TABLE 테이블명 MODIFT 칼럼명 데이터타입 DEFAULT 기본값;
  • 예시
    • ALTER TABLE EMPLOYEE MODIFY JOIN_DATE DATE DEFAULT SYSDATE;

3. RENAME TABLE

1️⃣ RENAME TABLE 기초 개념

1) RENAME TABLE 명령어

  • 데이터베이스에서 기존 테이블의 이름을 변경할 때 사용하는 SQL 명령어
  • 테이블의 이름만 변경
  • 테이블의 구조나 데이터는 그대로 유지

2) RENAME TABLE 시 주의사항

  • 제약 조건 및 인덱스
    • 테이블 이름 변경 → 테이블에 관련된 제약 조건, 인덱스, 뷰, 트리거 등도 영향 받음
    • 이들을 참조하는 다른 객체들의 이름이나 참조도 확인해야 함
  • 종속성 관리
    • 테이블 이름 변경 → 이를 참조하는 모든 SQL 쿼리, 저장 프로시저, 함수 등에서 새로운 이름을 사용해야 하므로 종속성 관리에 주의 필요
  • 권한
    • 테이블의 이름 변경되더라도 기존의 권한 설정은 유지되지만, 이를 관리하는 데 주의 필요

2️⃣ RENAME TABLE 사용법

1) 오라클에서 RENAME TABLE 명령어 사용

  • 형식
    • RENAME 기존테이블명 TO 변경테이블명;
  • 예시
    • RENAME EMP TO EMP_BACKUP;

2) SQL Server에서 sp_rename 명령어 사용

  • 형식
    • sp_rename '기존테이블명', '새테이블명';
  • 예시
    • sp_rename 'EMP', 'EMP_BACKUP';

4. DROP TABLE

1️⃣ DROP TABLE 기초 개념

1) DROP TABLE 명령어

  • 데이터베이스에서 테이블을 삭제할 때 사용하는 SQL 명령어
  • 테이블에 저장된 모든 데이터 뿐만 아니라, 테이블 자체와 관련된 모든 제약 조건, 인덱스, 트리거 등도 함께 삭제
  • 삭제된 테이블은 복구 불가
  • 이를 사용하려면 다시 생성해야 함

2) DROP TABLE 시 주의사항

  • 데이터 손실
    • DROP TABLE 명령어 실행 → 테이블과 그 안의 데이터 영구적으로 삭제
    • 삭제된 테이블은 복구 불가, 다시 사용하려면 새로 생성해야 함
  • 관련 객체 삭제
    • 테이블에 연결된 제약 조건, 인덱스, 트리거, 뷰 등도 함께 삭제
    • 데이터베이스의 다른 부분에서 문제가 발생할 수 있으므로 주의
  • 종속성 관리
    • 테이블이 삭제되면 이 테이블을 참조하는 모든 객체(예: 외래 키가 있는 다른 테이블, 뷰, 저장 프로시저 등)도 영향 받음
    • 이러한 종속성 고려하여 삭제 진행

2️⃣ DROP TABLE 사용법

1) 오라클에서 DROP TABLE 명령어 사용

  • 형식
    • DROP TABLE 테이블명;
  • 예시
    • DROP TABLE EMP_BACKUP;

5. TRUNCATE TABLE

1️⃣ TRUNCATE TABLE 기초 개념

1) TRUNCATE TABLE 명령어

  • 테이블의 모든 데이터를 빠르게 삭제할 때 사용하는 SQL 명령어
  • 테이블 구조는 그대로 유지하면서 테이블의 모든 행 삭제
  • 일반적으로 DELETE 명령어보다 빠름
    • DELETE와 달리 각 행의 삭제 작업이 개별적으로 기록되지 않음 → 성능 향상
  • 데이터 삭제 후 ROLLBACK 불가 (자동 커밋)

2️⃣ TRUNCATE TABLE 사용법

1) 형식

TRUNCATE TABLE 테이블명;

2) 예시

TRUNCATE TABLE EMP_BACKUP;
Share article