서론
Oracle 데이터베이스에서 테이블을 설계할 때, DEFAULT
제약 조건을 사용하여 열에 기본값을 지정할 수 있습니다. 기본값은 명시적으로 값을 지정하지 않고 행을 삽입할 때 자동으로 적용됩니다. 이 가이드에서는 DEFAULT
열 값을 사용하는 다양한 시나리오와 함께 실무에 즉시 적용 가능한 예시를 제공합니다.
DEFAULT 제약 조건 구문
DEFAULT
제약 조건은 테이블 생성 시 또는 ALTER TABLE
문을 사용하여 기존 열에 추가할 수 있습니다. 기본 구문은 다음과 같습니다:
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입 DEFAULT 기본값,
...
);
ALTER TABLE 테이블_이름
ADD (열_이름 데이터_타입 DEFAULT 기본값);
DEFAULT 열 값 사용 시나리오
1. 자주 사용되는 기본값 설정
특정 열에 대부분의 경우 특정 값이 사용되는 경우, DEFAULT
제약 조건을 사용하여 해당 값을 설정합니다. 예를 들어, 주문 상태를 나타내는 열의 기본값을 ‘접수됨’으로 설정할 수 있습니다.
CREATE TABLE orders (
order_id NUMBER PRIMARY KEY,
order_date DATE DEFAULT SYSDATE,
order_status VARCHAR2(20) DEFAULT '접수됨'
);
2. NULL 값 방지
특정 열에 NULL
값을 허용하지 않으려면 NOT NULL
제약 조건과 함께 DEFAULT
제약 조건을 사용합니다. 예를 들어, 고객 테이블에서 이메일 주소가 필수로 입력되어야 하는 경우 빈 문자열(”)을 기본값으로 설정할 수 있습니다.
CREATE TABLE customers (
customer_id NUMBER PRIMARY KEY,
customer_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) NOT NULL DEFAULT ''
);
3. 데이터 타입에 따른 기본값 설정
DEFAULT
제약 조건은 다양한 데이터 타입에 적용할 수 있습니다. 각 데이터 타입에 적합한 기본값을 설정해야 합니다.
- NUMBER: 숫자 값 (예: 0, -1, 3.14)
- VARCHAR2, CHAR: 문자열 값 (예: ‘Unknown’, ”)
- DATE: 날짜 값 (예:
SYSDATE
,TO_DATE('2024-01-01', 'YYYY-MM-DD')
) - TIMESTAMP: 타임스탬프 값 (예:
SYSTIMESTAMP
)
4. 함수를 이용한 동적 기본값 설정
SYSDATE
또는 사용자 정의 함수를 사용하여 동적인 기본값을 설정할 수 있습니다. 예를 들어, 행이 삽입될 때 자동으로 현재 날짜와 시간을 기록하도록 할 수 있습니다.
CREATE TABLE logs (
log_id NUMBER PRIMARY KEY,
log_date DATE DEFAULT SYSDATE,
description VARCHAR2(200)
);
5. 시퀀스를 이용한 자동 증가 값 설정
DEFAULT
제약 조건과 함께 시퀀스를 사용하여 열에 자동 증가 값을 설정할 수 있습니다. 이 방법은 주로 기본 키 열에 유일한 값을 자동으로 할당하는 데 사용됩니다.
CREATE SEQUENCE product_seq
START WITH 1
INCREMENT BY 1;
CREATE TABLE products (
product_id NUMBER DEFAULT product_seq.NEXTVAL PRIMARY KEY,
product_name VARCHAR2(50),
price NUMBER
);
DEFAULT 열 값 사용 예시
예시 1: 기본 정보 테이블 생성
다음은 기본 정보를 저장하는 employees
테이블을 생성하는 예시입니다. hire_date
열에는 기본적으로 현재 날짜가 설정되고, salary
열에는 기본적으로 3000이 설정됩니다.
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
email VARCHAR2(100) UNIQUE,
phone_number VARCHAR2(20),
hire_date DATE DEFAULT SYSDATE,
salary NUMBER DEFAULT 3000
);
INSERT INTO employees (employee_id, first_name, last_name, email)
VALUES (1, '길동', '홍', 'hong.gildong@example.com');
SELECT * FROM employees WHERE employee_id = 1;
실행 결과:
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE SALARY
---------- ---------- --------- ------------------ ------------ ----------- -------
1 길동 홍 hong.gildong@example.com 2024-05-16 3000
예시 2: 파티션 테이블 생성
다음은 월별로 파티션된 판매 테이블을 생성하는 예시입니다. sales_date
열에는 기본적으로 해당 파티션의 시작 날짜가 설정됩니다.
CREATE TABLE sales (
sale_id NUMBER PRIMARY KEY,
product_id NUMBER,
sales_date DATE,
quantity NUMBER,
amount NUMBER
) PARTITION BY RANGE (sales_date) (
PARTITION sales_jan_2024 VALUES LESS THAN (TO_DATE('2024-02-01', 'YYYY-MM-DD')),
PARTITION sales_feb_2024 VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD'))
);
ALTER TABLE sales MODIFY PARTITION sales_jan_2024
ADD (sales_date DATE DEFAULT TO_DATE('2024-01-01', 'YYYY-MM-DD'));
ALTER TABLE sales MODIFY PARTITION sales_feb_2024
ADD (sales_date DATE DEFAULT TO_DATE('2024-02-01', 'YYYY-MM-DD'));
INSERT INTO sales (sale_id, product_id, quantity, amount) PARTITION (sales_jan_2024)
VALUES (1, 101, 2, 100);
SELECT * FROM sales PARTITION (sales_jan_2024) WHERE sale_id = 1;
실행 결과:
SALE_ID PRODUCT_ID SALES_DATE QUANTITY AMOUNT
------ ---------- ----------- -------- -------
1 101 2024-01-01 2 100
주의사항
DEFAULT
제약 조건은 데이터 타입에 맞는 유효한 값이어야 합니다.DEFAULT
제약 조건은NULL
값을 명시적으로 삽입하는 것을 막지 못합니다.DEFAULT
제약 조건은 하위 호환성을 위해ALTER TABLE
문에서ADD
키워드와 함께 사용해야 합니다.
결론
DEFAULT
열 값은 데이터베이스 테이블 설계 시 유용하게 활용될 수 있습니다. 자주 사용되는 기본값을 설정하거나, NULL
값 입력을 방지하거나, 시퀀스와 함께 사용하여 유일한 값을 생성하는 데 사용할 수 있습니다. 적절한 DEFAULT
열 값 설정은 데이터 무결성을 향상시키고 애플리케이션 개발을 간소화하는 데 도움이 됩니다.