DDL (Data Definition Language)

2025. 2. 21. 04:16·개발/SQL

DDL (Data Definition Language) - 데이터 정의어

  • 데이터베이스 객체(테이블, 인덱스 등)를 정의하는 데 사용되는 언어.
  • 주요 명령어: CREATE, ALTER, DROP

1. 테이블 생성 (CREATE TABLE)

  • 테이블을 생성하는 명령어.
  • 사용 형식:
SQL
 
CREATE TABLE 테이블명 (
    컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값] [제약조건],
    [컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값] [제약조건]],
    ...
    [CONSTRAINT 기본키설정명 PRIMARY KEY (컬럼명[,컬럼명,...])],
    [CONSTRAINT 외래키설정명 FOREIGN KEY (컬럼명) REFERENCES 테이블명(컬럼명) [ON DELETE 옵션]],
    ...
    [CONSTRAINT 제약조건명 제약조건 (컬럼명)],
    ...
);
  • 주요 옵션 설명:
    • NOT NULL: 해당 컬럼에 NULL 값 입력 불가.
    • DEFAULT 값: 데이터 입력 시 값이 없을 경우 기본값 설정. (예: DEFAULT 0, DEFAULT SYSDATE)
    • CONSTRAINT 기본키설정명 PRIMARY KEY (컬럼명[,컬럼명,...]): 기본키 제약 조건 설정.
    • CONSTRAINT 외래키설정명 FOREIGN KEY (컬럼명) REFERENCES 테이블명(컬럼명) [ON DELETE 옵션]: 외래키 제약 조건 설정.
      • ON DELETE CASCADE: 부모 테이블의 행이 삭제될 때 자식 테이블의 관련 행도 함께 삭제.
      • ON DELETE SET NULL: 부모 테이블의 행이 삭제될 때 자식 테이블의 외래키 값을 NULL로 설정.
    • CONSTRAINT 제약조건명 UNIQUE (컬럼명): 컬럼의 값이 중복되지 않도록 제약.
    • CONSTRAINT 제약조건명 CHECK (조건): 컬럼의 값이 특정 조건을 만족하도록 제약.
  • 명명 규칙:
    • 기본키설정명: PK_테이블명 형식 권장.
    • 외래키설정명: FK_테이블명_부모테이블명 형식 권장.
    • UNIQUE 제약조건: UQ_테이블명_컬럼명 형식 권장.
    • CHECK 제약조건: CK_테이블명_컬럼명 형식 권장.
  • 제공된 테이블 생성 예시:
SQL
 
CREATE TABLE PROFESSOR (
    PRO_ID CHAR(5) PRIMARY KEY,
    PRO_NAME VARCHAR2(30) NOT NULL,
    PRO_ROOM_NUM VARCHAR2(210) UNIQUE,
    PRO_TEL_NUM VARCHAR2(20) CHECK (PRO_TEL_NUM LIKE '010%'),
    CONSTRAINT UQ_PROFESSOR_ROOM_NUM UNIQUE (PRO_ROOM_NUM),
    CONSTRAINT CK_PROFESSOR_TEL_NUM CHECK (PRO_TEL_NUM LIKE '010%')
);

COMMENT ON TABLE PROFESSOR IS '교수 정보 테이블';
COMMENT ON COLUMN PROFESSOR.PRO_ID IS '교수 ID';
COMMENT ON COLUMN PROFESSOR.PRO_NAME IS '교수 이름';
COMMENT ON COLUMN PROFESSOR.PRO_ROOM_NUM IS '교수 연구실 번호';
COMMENT ON COLUMN PROFESSOR.PRO_TEL_NUM IS '교수 전화번호';

CREATE TABLE STUDENTS (
    SID NUMBER(10) PRIMARY KEY,
    STU_NAME VARCHAR2(30) NOT NULL,
    DEPT_NAME VARCHAR2(50),
    GRADE NUMBER(1),
    ADDRESS VARCHAR2(200)
);

CREATE TABLE SUBJECTS (
    SUB_CODE CHAR(4) PRIMARY KEY,
    SUB_NAME VARCHAR2(30),
    CREDIT NUMBER(1),
    PRO_ID CHAR(5),
    CONSTRAINT FK_SUBJECTS FOREIGN KEY (PRO_ID) REFERENCES PROFESSOR (PRO_ID) ON DELETE CASCADE
);

CREATE TABLE LECTURE_TIMETABLE (
    LEC_TIMETABLE_CODE NUMBER(2) PRIMARY KEY,
    START_TIME CHAR(4)
);

CREATE TABLE TAKING_SUBJECT (
    SUB_CODE CHAR(4),
    SID NUMBER(10),
    COURSE_CREDIT NUMBER(3),
    CONSTRAINT PK_TAKING_SUBJECT PRIMARY KEY (SUB_CODE, SID),
    CONSTRAINT FK_TAKING_SUBJECT_SID FOREIGN KEY (SID) REFERENCES STUDENTS (SID) ON DELETE CASCADE,
    CONSTRAINT FK_TAKING_SUBJECT_SUB_CODE FOREIGN KEY (SUB_CODE) REFERENCES SUBJECTS (SUB_CODE) ON DELETE CASCADE
);

CREATE TABLE LECTURE_INFO (
    SUB_CODE CHAR(4),
    LEC_TIMETABLE_CODE NUMBER(2),
    LEC_ROOM_NUM VARCHAR2(10),
    CONSTRAINT PK_LECTURE_INFO PRIMARY KEY (SUB_CODE, LEC_TIMETABLE_CODE),
    CONSTRAINT FK_LECTURE_INFO_SUB_CODE FOREIGN KEY (SUB_CODE) REFERENCES SUBJECTS (SUB_CODE) ON DELETE CASCADE,
    CONSTRAINT FK_LECTURE_INFO_LEC_TIMETABLE_CODE FOREIGN KEY (LEC_TIMETABLE_CODE) REFERENCES LECTURE_TIMETABLE (LEC_TIMETABLE_CODE) ON DELETE CASCADE
);

2. ALTER TABLE 문

  • 테이블의 구조를 변경하는 데 사용되는 명령어.
  • 테이블 이름 변경, 컬럼 추가, 수정, 삭제, 제약 조건 추가/삭제/활성화/비활성화 등의 기능을 제공.

2.1. 테이블 이름 변경 (RENAME TO)

  • 사용 형식:
    SQL
    ALTER TABLE 원본테이블명 RENAME TO 변경테이블명;
  • 예시:
    SQL
    ALTER TABLE LECTURE_TIMETABLE RENAME TO LEC_TIMETBL;
    
  • 주의사항: 테이블 이름 변경 시, 해당 테이블을 참조하는 다른 객체(뷰, 프로시저 등)도 수정해야 한다.

2.2. 컬럼 추가 (ADD)

  • 사용 형식:
    SQL
    ALTER TABLE 테이블명 ADD (컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값]);
    
  • 예시:
    SQL
    ALTER TABLE STUDENTS ADD (TEL_NUM VARCHAR2(20));
    
  • 주의사항: NOT NULL 제약 조건을 추가할 경우, 기존 데이터가 NULL이 아니어야 한다.

2.3. 컬럼 수정 (MODIFY)

  • 사용 형식:
    SQL
    ALTER TABLE 테이블명 MODIFY (컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값]);
    
  • 예시:
    SQL
    ALTER TABLE STUDENTS MODIFY (TEL_NUM NUMBER(15));
    
  • 주의사항:
    • 데이터 타입 변경 시 데이터 변환이 필요할 수 있다.
    • 데이터 크기를 줄일 경우 데이터가 잘릴 수 있다.
    • 제약 조건(예: NOT NULL, UNIQUE)을 고려해야 한다.

2.4. 컬럼 삭제 (DROP COLUMN)

  • 사용 형식:
    SQL
    ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
    
  • 예시:
    SQL
    ALTER TABLE STUDENTS DROP COLUMN TEL_NUM;
    
  • 주의사항: 컬럼 삭제 시 데이터가 완전히 삭제되므로 신중하게 사용해야 한다.

2.5. 컬럼 이름 변경 (RENAME COLUMN TO)

  • 사용 형식:
    SQL
    ALTER TABLE 테이블명 RENAME COLUMN 원본컬럼명 TO 변경컬럼명;
    
  • 예시:
    SQL
    ALTER TABLE LEC_TIMETBL RENAME COLUMN LECTURE_TIMETABLE_CODE TO LEC_TIME;
    
  • 주의사항: 컬럼 이름 변경 시, 해당 컬럼을 참조하는 다른 객체(뷰, 프로시저 등)도 수정해야 한다.

2.6. 제약 조건 추가/삭제/활성화/비활성화

  • 추가:
    SQL
    ALTER TABLE 테이블명 ADD CONSTRAINT 제약이름 제약조건;
    
  • 삭제:
    SQL
    ALTER TABLE 테이블명 DROP CONSTRAINT 제약이름;
    
  • 활성화/비활성화:
    SQL
    ALTER TABLE 테이블명 ENABLE|DISABLE 제약이름;
    
  • 예시:
    SQL
     
  • 주의사항:
    • 제약 조건 비활성화 시 데이터 무결성이 깨질 수 있다.
    • 제약 조건 활성화 시 기존 데이터가 제약 조건을 만족해야 한다.
    • 외래키 제약 조건 비활성화 시 참조 무결성이 깨질 수 있다.
-- STUDENTS 테이블의 기본키 삭제 (외래키 제약 조건 먼저 삭제 필요)
ALTER TABLE TAKING_SUBJECT DROP CONSTRAINT FK_STU_TAKE_SUB;
ALTER TABLE STUDENTS DROP CONSTRAINT PK_STUDENTS;

-- TAKING_SUBJECT 테이블에 외래키 추가
ALTER TABLE TAKING_SUBJECT ADD CONSTRAINT FK_STU_TAKE_SUB FOREIGN KEY (SID) REFERENCES STUDENTS (SID);

-- 외래키 제약 조건 비활성화
ALTER TABLE TAKING_SUBJECT DISABLE CONSTRAINT FK_STU_TAKE_SUB;

-- 데이터 무결성 확인 후 외래키 제약 조건 활성화
ALTER TABLE TAKING_SUBJECT ENABLE CONSTRAINT FK_STU_TAKE_SUB;

3.DROP TABLE 문

  • 테이블을 삭제하는 명령어.
  • 사용 형식:
    SQL
    DROP TABLE 테이블명;
    
  • 예시:
    SQL
     
  • 주의사항:
    • DROP TABLE 문은 테이블과 데이터를 완전히 삭제하므로 신중하게 사용해야 한다.
    • 삭제된 테이블은 복구할 수 없다.
    • 외래키 제약 조건이 있는 테이블을 삭제할 때, 자식 테이블의 외래키 제약 조건을 먼저 삭제해야 한다.
    • CASCADE CONSTRAINTS 옵션을 사용하여 외래키 제약 조건을 함께 삭제할 수 있지만, 주의해야 한다.
DROP TABLE TEMP01;
DROP TABLE TEMP02;
-- ...
DROP TABLE TEMP11;

성능 고려 사항

  • ALTER TABLE 문은 테이블의 구조를 변경하므로, 대용량 테이블의 경우 성능에 영향을 줄 수 있다.
  • ALTER TABLE 문을 수행하는 동안 테이블에 대한 접근이 제한될 수 있다.
저작자표시 비영리 변경금지 (새창열림)

'개발 > SQL' 카테고리의 다른 글

Oracle 데이터 타입 - 이진데이터  (0) 2025.02.21
Oracle 데이터 타입 - 날짜  (0) 2025.02.21
Oracle 데이터 타입 - 숫자  (0) 2025.02.21
Oracle 데이터 타입 - 문자열  (0) 2025.02.21
Oracle 11g XE scott계정 생성하기  (0) 2025.02.21
'개발/SQL' 카테고리의 다른 글
  • Oracle 데이터 타입 - 이진데이터
  • Oracle 데이터 타입 - 날짜
  • Oracle 데이터 타입 - 숫자
  • Oracle 데이터 타입 - 문자열
함수형 인간
함수형 인간
잘 까먹는 개발자의 두뇌 확장 장치
  • 함수형 인간
    개발 기록 노트
    함수형 인간
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 글 목록 (84)
      • 기타 (1)
      • 개발 (82)
        • Java (6)
        • Javascript (1)
        • Spring (20)
        • jQuery (0)
        • Git (0)
        • servlet (11)
        • JSP (6)
        • HTML (0)
        • CSS (10)
        • SQL (9)
        • JSTL (3)
        • Mybatis (4)
        • Design Patterns (0)
        • HTTP (2)
        • Devtools (0)
        • IntelliJ (5)
        • JDBC (1)
        • Lombok (3)
        • Logging (1)
      • 책 리뷰 (0)
  • hELLO· Designed By정상우.v4.10.3
함수형 인간
DDL (Data Definition Language)
상단으로

티스토리툴바