Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL DECIMAL(십진수) 데이터 타입 사용 방법 완벽 정리

MySQL DECIMAL 데이터 타입이란?

MySQL의 DECIMAL 데이터 타입은 소수점 오차 없이 정확한 숫자 값을 저장할 때 사용합니다. 급여, 가격, 금액처럼 정확성이 중요한 숫자 데이터를 다룰 때는 FLOAT나 DOUBLE보다 DECIMAL을 사용하는 것이 안전합니다.

DECIMAL 기본 문법

yourColumnName DECIMAL(전체_자릿수, 소수점_이하_자릿수);

예를 들어 DECIMAL(6,2)는 전체 6자리 중 소수점 이하 2자리를 의미하며, 정수 부분은 최대 4자리까지 저장할 수 있습니다. 즉, 저장 가능한 값의 범위는 -9999.99부터 9999.99까지입니다.

DECIMAL 컬럼을 포함한 테이블 생성 예제

mysql> create table EmployeeInformation
-> (
-> EmpId int auto_increment primary key,
-> EmpName varchar(200),
-> EmpSalary DECIMAL(6,2)
-> );
Query OK, 0 rows affected (0.54 sec)

위 예제에서 EmpSalary 컬럼은 DECIMAL(6,2)로 선언되었으므로, 전체 자릿수가 6자리를 초과하는 값은 저장할 수 없습니다.

범위 초과 시 발생하는 에러

EmpSalary 컬럼에 허용 범위를 벗어나는 값을 삽입하면 아래와 같은 에러가 발생합니다.

mysql> insert into EmployeeInformation(EmpName,EmpSalary) values('John',6999999.50);
ERROR 1264 (22003): Out of range value for column 'EmpSalary' at row 1

허용 범위 내의 값 삽입

이번에는 저장 가능한 자릿수에 맞춰 값을 삽입해 보겠습니다.

mysql> insert into EmployeeInformation(EmpName,EmpSalary) values('John',6999.50);
Query OK, 1 row affected, 1 warning (0.15 sec)

mysql> insert into EmployeeInformation(EmpName,EmpSalary) values('John',69999.50);
Query OK, 1 row affected, 1 warning (0.20 sec)

두 번째 INSERT 문에서 경고(warning)가 발생한 이유는 69999.50이 DECIMAL(6,2)의 표현 범위를 벗어나기 때문입니다. 엄격 모드(strict mode)가 비활성화된 경우 MySQL은 값을 반올림하여 70000으로 저장하고 경고만 표시합니다.

저장된 레코드 확인하기

모든 레코드를 조회하려면 다음과 같이 SELECT 문을 실행합니다.

mysql> select * from EmployeeInformation;

실행 결과는 다음과 같습니다.

+-------+---------+-----------+
| EmpId | EmpName | EmpSalary |
+-------+---------+-----------+
| 1 | John | 7000 |
| 2 | John | 70000 |
+-------+---------+-----------+
2 rows in set (0.00 sec)

정리

DECIMAL(M, D)에서 M은 전체 유효 자릿수(정밀도), D는 소수점 이하 자릿수(스케일)를 나타냅니다. 정확한 수치 연산이 필요한 금융·회계 데이터에는 DECIMAL 타입이 가장 적합하며, 저장할 값의 최대 자릿수를 미리 고려해 M과 D를 설정하면 범위 초과 에러를 예방할 수 있습니다.