MySQL에서는 UPDATE 명령문을 사용하여 특정 열의 값을 간단하게 감소시킬 수 있습니다. 여기에 WHERE 절에 조건을 추가하면 값이 0 아래로 떨어지지 않도록 제한할 수도 있습니다.
기본 문법
값을 감소시키면서 0 미만으로 내려가는 것을 방지하는 기본 문법은 다음과 같습니다.
UPDATE yourTableName
SET yourColumnName = yourColumnName - 1
WHERE yourColumnName > 0;
핵심은 yourColumnName > 0 조건입니다. 이 조건 덕분에 현재 값이 0보다 큰 행만 업데이트되므로, 값이 음수가 되는 상황을 원천적으로 차단할 수 있습니다.
예제 테이블 생성
실제 동작을 확인하기 위해 먼저 테스트용 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE DecrementDemo
-> (
-> DecrementValue int
-> );
Query OK, 0 rows affected (0.62 sec)
샘플 데이터 삽입
INSERT 문을 사용하여 몇 개의 레코드를 입력합니다.
mysql> INSERT INTO DecrementDemo VALUES(15),(14),(13),(12),(11),(10);
Query OK, 6 rows affected (0.18 sec)
Records: 6 Duplicates: 0 Warnings: 0
현재 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DecrementDemo;
실행 결과는 다음과 같습니다.
+----------------+
| DecrementValue |
+----------------+
| 15 |
| 14 |
| 13 |
| 12 |
| 11 |
| 10 |
+----------------+
6 rows in set (0.00 sec)
값 감소 쿼리 실행
이제 WHERE 조건과 함께 UPDATE 문을 실행하여 모든 값을 1씩 감소시킵니다.
mysql> UPDATE DecrementDemo
-> SET DecrementValue = DecrementValue - 1 WHERE DecrementValue > 0;
Query OK, 6 rows affected (0.16 sec)
Rows matched: 6 Changed: 6 Warnings: 0
결과 검증
다시 SELECT 문을 실행하여 값이 정상적으로 감소했는지 확인합니다.
mysql> SELECT * FROM DecrementDemo;
실행 결과는 다음과 같습니다.
+----------------+
| DecrementValue |
+----------------+
| 14 |
| 13 |
| 12 |
| 11 |
| 10 |
| 9 |
+----------------+
6 rows in set (0.00 sec)
정리
이처럼 SET 열이름 = 열이름 - 1 구문과 WHERE 열이름 > 0 조건을 함께 사용하면, 값을 안전하게 감소시키면서도 0 미만으로 내려가는 것을 확실하게 방지할 수 있습니다. 재고 수량, 포인트 잔액처럼 음수가 될 수 없는 값을 다룰 때 특히 유용한 패턴입니다.