(DB실무) Part4-SQL 기본 및 활용-2.DDL
2026년 11월 8일 공유
오라클 DDL: 테이블 생성과 변경
개요
**DDL(Data Definition Language)**은 테이블과 같은 데이터베이스 객체의 구조, 즉 스키마를 정의하고 변경하는 명령어다. DML이 테이블의 데이터를 다루는 데 비해, DDL은 테이블 생성·변경·삭제를 다룬다. 이번 강의에서는 오라클의 데이터 타입, 제약 조건, 테이블 생성 및 변경 방법을 살펴본다.
핵심 개념
- 테이블 생성과 구조 변경에는 각각
CREATE TABLE,ALTER TABLE을 사용한다.
- 기본 데이터 타입에는
CHAR,VARCHAR2,NUMBER,DATE가 있다.
- 제약 조건은 데이터가 만족해야 하는 규칙을 지정하며, 이름을 직접 지정하거나 시스템이 자동으로 부여하게 할 수 있다.
- 외래 키는 참조하는 부모 테이블이 먼저 생성되어 있어야 한다.
- 기존 테이블과 데이터를 복사해 새 테이블을 만들 수 있지만, 제약 조건은 모두 복사되지 않는다.
상세 노트
1. 이름과 컬럼 정의 규칙
- 테이블 이름은 다른 테이블과 중복될 수 없다. 단수형 이름은 권장사항이다.
- 컬럼 이름은 한 테이블 안에서 중복될 수 없다. 서로 다른 테이블에서는 같은 컬럼 이름을 사용할 수 있다.
- 테이블·컬럼·제약 조건 이름에는 예약어를 사용할 수 없다.
- 이름은 문자로 시작해야 하며, 숫자와 일부 기호는 뒤에 사용할 수 있다.
- 테이블 생성 시 각 컬럼의 이름과 데이터 타입을 지정하고, 컬럼 정의는 쉼표로 구분한다.
2. 주요 오라클 데이터 타입
CHAR(n): 고정 길이 문자열. 지정한 길이보다 짧은 값은 공백으로 채운다.
VARCHAR2(n): 가변 길이 문자열. 실제 입력한 길이만큼 저장한다. 따라서 뒤에 공백이 포함된 값은 공백이 없는 값과 다를 수 있다.
NUMBER(p, s): 숫자 타입.p는 전체 자릿수,s는 소수 자릿수다. 예를 들어NUMBER(8, 2)는 전체 8자리 중 소수부가 2자리다.NUMBER(3, 0)은 소수부가 없는 최대 3자리 숫자를 뜻한다.
DATE: 날짜와 시간 정보를 저장한다.
3. 주요 제약 조건
- 기본 키(Primary Key): 테이블을 식별하는 키다. 한 테이블에 하나만 정의할 수 있으며, 여러 컬럼을 묶은 복합 기본 키도 가능하다. 기본 키에는
NOT NULL과UNIQUE성격이 포함된다.
- 외래 키(Foreign Key): 다른 테이블의 키를 참조해 참조 무결성을 지킨다. 참조 대상 테이블은 먼저 생성되어 있어야 한다.
NOT NULL: 해당 컬럼에 널 값을 허용하지 않는다.
UNIQUE: 해당 컬럼의 값이 중복되지 않도록 한다.
CHECK: 값이 지정된 조건을 만족하도록 제한한다. 예를 들어 등번호가 99보다 작도록 설정할 수 있다.
- 제약 조건 이름은 직접 지정할 수 있으며, 지정하지 않으면 시스템이 자동으로 생성한다. 명명된 제약 조건은 나중에 변경하거나 삭제할 때 식별하기 편리하다.
4. 테이블 생성
기본 형식은 다음과 같다.
CREATE TABLE 테이블명 ( 컬럼명 데이터타입, 컬럼명 데이터타입, CONSTRAINT 제약조건명 제약조건);제약 조건은 컬럼 정의와 함께 선언하거나, 테이블 정의 끝부분에 별도로 모아 선언할 수 있다. 복합 기본 키처럼 여러 컬럼을 함께 지정해야 하는 경우에는 테이블 수준에서 정의한다.
외래 키를 선언할 때는 참조 대상 테이블과 컬럼도 지정한다. 따라서 테이블 생성 순서는 참조 관계를 고려해야 한다. 예를 들어 독립적인 부모 테이블을 먼저 만들고, 그 뒤에 이를 참조하는 자식 테이블을 만든다.
5. 외래 키의 삭제 동작
부모 테이블의 레코드를 삭제할 때 자식 테이블의 참조 데이터가 영향을 받는다. 기본적으로 참조 무결성을 깨뜨리는 삭제는 허용되지 않는다. 외래 키에는 다음과 같은 동작을 지정할 수 있다.
- 기본 동작: 참조 중인 부모 레코드의 삭제를 허용하지 않는다.
ON DELETE CASCADE: 부모 레코드 삭제 시 관련 자식 레코드도 함께 삭제한다.
ON DELETE SET NULL: 부모 레코드 삭제 시 자식 테이블의 외래 키 값을 널로 바꾼다. 해당 컬럼이 널을 허용해야 한다.
오라클 외래 키에서는 삭제 시 동작을 지정할 수 있지만, ON UPDATE 동작은 지원하지 않는다.6. 기존 테이블을 이용한 생성
CREATE TABLE ... AS SELECT 형식으로 기존 테이블의 조회 결과를 새 테이블로 만들 수 있다.CREATE TABLE 새테이블 ASSELECT 컬럼FROM 기존테이블;SELECT에 지정한 컬럼과 조건에 따라 새 테이블의 구조와 데이터가 만들어진다.
- 일반적으로 컬럼 이름과 데이터 타입, 조회 결과의 데이터는 복사된다.
- 제약 조건은 모두 복사되지 않는다. 강의에서 강조한 것처럼
NOT NULL은 복사될 수 있지만, 기본 키·외래 키·유니크·체크 제약 조건은 새 테이블에 별도로 설정해야 한다.
7. 테이블 변경
테이블 구조 변경에는
ALTER TABLE을 사용한다.- 컬럼 추가:
ADD
- 컬럼 삭제:
DROP COLUMN
- 컬럼 이름 변경:
RENAME COLUMN
- 컬럼 정의 변경:
MODIFY
- 제약 조건 추가:
ADD CONSTRAINT
- 제약 조건 삭제:
DROP CONSTRAINT
컬럼 이름만 변경하면 데이터 타입이나
NOT NULL 등 기존 정의는 유지된다.컬럼 정의 변경 시 고려 사항
기존 데이터와 충돌하는 변경은 허용되지 않거나 제한될 수 있다.
- 데이터가 없는 컬럼은 데이터 타입 변경이 가능하다.
- 컬럼 크기 확대는 일반적으로 가능하다.
- 크기 축소는 기존 데이터가 새 크기에 들어갈 수 있어야 한다.
NOT NULL제약 조건은 기존 데이터에 널 값이 없을 때 추가할 수 있다. 널 제약 조건을 제거하는 것은 가능하다.
- 기본값 변경은 이후에 입력되는 데이터에 적용되며, 기존 데이터가 소급해 바뀌지는 않는다.
8. 제약 조건 변경
NOT NULL은ALTER TABLE ... MODIFY로 추가하거나 제거한다.
- 그 밖의 제약 조건은
ALTER TABLE ... ADD CONSTRAINT로 추가하고,ALTER TABLE ... DROP CONSTRAINT로 삭제한다.
- 제약 조건 이름을 자동 생성한 경우에는 시스템 카탈로그에서 이름을 확인한 뒤 변경 또는 삭제해야 한다.
9. 테이블 이름 변경과 삭제
- 테이블 이름 변경:
RENAME 기존이름 TO 새이름
- 테이블 삭제:
DROP TABLE 테이블명
- 다른 테이블이 해당 테이블을 외래 키로 참조하면 삭제가 제한될 수 있다.
CASCADE CONSTRAINTS를 사용하면 관련 제약 조건도 함께 삭제할 수 있다.
강의 실습에서는 데이터 사전 뷰를 조회해 테이블과 제약 조건이 생성·삭제된 결과를 확인했다. 이는 DDL 실행 결과를 점검하는 방법으로 활용할 수 있다.