본문 바로가기
데이터베이스

[SQLD] 데이터베이스 제약조건 및 형변환

by Data Lib 2023. 11. 17.

이번 포스팅에서는 데이터베이스에 유일성, 일관성 등을 유지시키기 위한 제약조건을 오라클 기준으로 설명드리겠습니다. 그리고 데이터 타입과 타입 간의 형변화 프로세스에 대해 알아보겠습니다. 

 

 

제약조건(Constraint)

오라클에서 제약 조건은 해당 테이블에 저장된 데이터의 무결성과 정확성을 강화하기 위해 테이블에 정의된 규칙입니다. 제약 조건은 데이터베이스의 데이터가 특정 조건이나 기준을 충족하는지 확인합니다. 결국 데이터의 일관성과 신뢰성을 유지하는 데 도움을 주죠.

 

Oracle은 아래와 같이 특정 목적에 맞는 다양한 유형의 제약 조건을 지원합니다. 제약 조건(PK, FK 등)을 지정하는 방법은 테이블 생성하면서 지정하는 방법과 테이블 생성 후 ALTER TABLE 명령어로 지정하는 벙법이 있습니다. 두 방법 모두 제약조건 설정이 가능합니다. 

오라클 제약조건
오라클 제약조건

 

  1. NOT NULL제약조건: 한 열이 NULL 값을 가지지 못하도록 합니다.
  2. DEFAULT 제약조건: 한 열에 특정한 값이 없을 경우, 대체할 기본값(Default)을 설정합니다.
  3. UNIQUE 제약조건: 한 열에서 각기 다른 값만 가지도록 설정합니다. (중복된 값 불가)
  4. 기본키(PRIMARY KEY) 제약조건: 데이터베이스 테이블에서 각각의 행/레코드가 유일하게 식별 가능한 값을 가지도록 합니다.
  5. 외래키(FOREIGN KEY) 제약조건: 또 다른 어떤 데이터베이스 테이블에서 행/레코드가 유일하게 식별 가능한 값을 가지도록 합니다.
  6.  
  7. CHECK 제약조건: CHECK 제약조건은 특정 조건(conditions)에 해당하는 값만 들어갈 수 있도록 해줍니다.

 

Oracle 데이터 타입

오라클을 기준으로 아래와 같은 데이터 타입이 있습니다. 여기서 알아두어야 할 내용은 가변길이와 고정길이 개념입니다. varchar2(10)과 char(10)이 있다고 할 때 같은 문자 타입이지만 varchar2는 가변길이이고, char는 고정길이입니다. 가변결이 타입은 10자리를 잡아 놓았다 하더라도 'aaa'를 넣으면 3자리만 공간을 차지합니다. 하지만 고정길이인 char는 10자리 모두 공간을 사용합니다. 

 

데이터 타입 설명
CHAR(n) 고정길이 문자 / 최대 2,000byte / 디폴트 값은 1byte
VARCHAR2(n) 가변길이 문자 / 최대 4,000byte / 디폴트 값은 1byte
NCHAR(n) 고정길이 유니코드 문자(다국어 입력가능) / 최대 2,000byte / 디폴트 값은 1byte
NVARCHAR(n) 가변길이 유니코드 문자(다국어 입력가능) / 최대 2,000byte / 디폴트 값은 1byte
LONG 최대 2GB 크기의 가변길이 문자형
CLOB 대용량 텍스트 데이터 타입(최대 4Gbyte)
NCLOB 대용량 텍스트 유니코드 데이터 타입(최대 4Gbyte)

 

데이터 유형 변환(형변환)

데이터 형 변환에는 암시적 변환과 명시적 변환이 있습니다.  

1. 암시적(implicit) 데이터 유형 변환

script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1747520155389674" crossorigin="anonymous">

Implicit 데이터 유형 변환은 함수 사용시 자동적으로 컬럼의 데이터 타입이 변환되는 것을 말합니다. 하지만 컬럼의 데이터 타입에 맞게 사용하는 것을 권고합니다. 아래 표를 보시면 문자(varchar, char) 타입인데 number나 date 타입으로 암시적으로 변환이 됩니다. 또 반대로 number나 date 타입이 문자 타입인 varchar로 형변환 됩니다. 

 

원본 대상 사례
VARCHAR2 OR CHAR NUMBER select sal + '100'
from  
emp
where 
empno = '7788';



select sal + 100
from   emp
where  empno = '7788';
VARCHAR2 OR CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2

 

2. 명시적(explicit) 데이터 유형 변환

Explicit 데이터 유형 변황은 컬럼의 데이터 타입을 변경하기 위해 함수를 명시적으로 사용해서 변환하는 것을 말합니다. 아래와 같은 함수(to_number, to_date, to_char)들이 있습니다.

 

명시적 데이터 유형 변환
명시적 데이터 유형 변환

 

마음대로 형변환하면서 테스트 해보시기 바랍니다. 

-- 현변환 실습을 위한 스크립트

create table explicit_test
(
   char_col varchar2(20)
 , date_col date
 , num_col number(10)
)
;

insert into explicit_test select to_char(sysdate,'yyyymmddhh24miss'), sysdate, 1234 from dual;
insert into explicit_test select to_char(sysdate+3,'yyyymmddhh24miss'), sysdate+3, 56789012 from dual;

commit;

select substr(to_char(123,'00000'),1,5)
from   dual
;

 

데이터 유형 변환의 경우 데이터의 손실이 일어나거나 예기치 않은 동작으로 성능 문제가 발생할 수도 있습니다. 형변환을 할 때 그 영향을 고려해서 할 필요가 있습니다.