MySQL에서 데이터 삽입 시 양수를 음수로 변환하기
MySQL에서 데이터를 삽입하는 동시에 양수 값을 음수로 변환해야 하는 경우가 있습니다. 예를 들어 지출 내역을 기록할 때 입력된 금액을 자동으로 마이너스(-) 처리하고 싶다면, INSERT ... SELECT 문과 함께 값에 -1을 곱하는 간단한 방법을 사용할 수 있습니다.
아래에서 전체 과정을 단계별로 살펴보겠습니다.
1단계: 원본 테이블 생성
먼저 테스트에 사용할 테이블을 생성합니다.
mysql> create table recordsDemo
-> (
-> UserId int,
-> Value int
-> );
Query OK, 0 rows affected (0.52 sec)
2단계: 샘플 데이터 삽입
INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into recordsDemo values(1,10);
Query OK, 1 row affected (0.17 sec)
mysql> insert into recordsDemo values(3,598);
Query OK, 1 row affected (0.18 sec)
mysql> insert into recordsDemo values(5,786);
Query OK, 1 row affected (0.25 sec)
mysql> insert into recordsDemo values(7,189);
Query OK, 1 row affected (0.16 sec)
mysql> insert into recordsDemo values(9,345);
Query OK, 1 row affected (0.14 sec)
3단계: 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from recordsDemo;
실행 결과는 다음과 같습니다.
+--------+-------+
| UserId | Value |
+--------+-------+
| 1 | 10 |
| 3 | 598 |
| 5 | 786 |
| 7 | 189 |
| 9 | 345 |
+--------+-------+
5 rows in set (0.00 sec)
4단계: 변환 결과를 저장할 두 번째 테이블 생성
양수가 음수로 변환된 값을 저장할 새로운 테이블을 만듭니다.
mysql> create table PositiveToNegativeValueDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Money int
-> );
Query OK, 0 rows affected (0.83 sec)
5단계: 삽입하면서 양수를 음수로 변환
핵심은 SELECT 절에서 원래 값에 (-1 * Value)를 적용하는 것입니다. 이렇게 하면 데이터를 다른 테이블로 옮기는 동시에 부호가 자동으로 반전됩니다.
mysql> insert into PositiveToNegativeValueDemo(Id,Money)
-> select UserId,(-1*Value) from recordsDemo;
Query OK, 5 rows affected (0.15 sec)
Records: 5 Duplicates: 0 Warnings: 0
6단계: 변환 결과 확인
SELECT 문으로 두 번째 테이블의 레코드를 조회합니다.
mysql> select *from PositiveToNegativeValueDemo;
모든 값이 음수로 변환되어 저장된 것을 확인할 수 있습니다.
+------+-------+
| Id | Money |
+------+-------+
| 1 | -10 |
| 3 | -598 |
| 5 | -786 |
| 7 | -189 |
| 9 | -345 |
+------+-------+
5 rows in set (0.00 sec)
정리 및 추가 팁
위 예제처럼 INSERT ... SELECT 문에서 산술 연산을 조합하면 데이터를 복사하는 과정에서 손쉽게 부호를 변환할 수 있습니다.
참고로 상황에 따라 다음과 같은 방법도 활용할 수 있습니다.
- 단항 마이너스 연산자: select UserId, -Value from recordsDemo; 처럼 -Value만 작성해도 동일한 결과를 얻습니다.
- ABS() 함수와 조합: 원본 데이터에 음수와 양수가 섞여 있을 때는 -ABS(Value)를 사용하면 어떤 값이든 항상 음수로 통일할 수 있습니다.
- 트리거 활용: 특정 테이블에 데이터가 들어올 때마다 자동으로 부호를 반전시키고 싶다면 BEFORE INSERT 트리거에 SET NEW.Money = -NEW.Money; 로직을 추가하는 방법도 고려할 수 있습니다.
이처럼 MySQL에서는 별도의 애플리케이션 로직 없이도 SQL 쿼리만으로 삽입 시점의 값 변환을 깔끔하게 처리할 수 있습니다.