데이터베이스 작업 중 특정 조건에 해당하는 레코드의 숫자 값을 일괄적으로 감소시켜야 하는 경우가 자주 있습니다. 예를 들어 점수(Score)에서 벌점을 차감하거나 재고 수량을 줄이는 상황이 대표적입니다. 이번 글에서는 UPDATE 문과 WHERE 절을 활용하여 특정 레코드의 값을 10만큼 감소시키는 방법을 예제와 함께 살펴보겠습니다.
1. 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Score int
);
Query OK, 0 rows affected (0.89 sec)위 테이블은 자동 증가(AUTO_INCREMENT)되는 기본키 Id와 정수형 Score 컬럼으로 구성되어 있습니다.
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(Score) values(67); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable(Score) values(78); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable(Score) values(90); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable(Score) values(56); Query OK, 1 row affected (0.13 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블에 저장된 전체 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+----+-------+ | Id | Score | +----+-------+ | 1 | 67 | | 2 | 78 | | 3 | 90 | | 4 | 56 | +----+-------+ 4 rows in set (0.00 sec)
4. 특정 값 10만큼 감소시키기
핵심은 UPDATE 문에서 컬럼 값 자체를 참조하는 것입니다. Score = Score - 10처럼 기존 값에서 10을 빼는 표현식을 사용하고, WHERE 절로 대상 레코드를 지정하면 됩니다. 여기서는 Id가 3인 레코드의 점수를 10 감소시켜 보겠습니다.
mysql> update DemoTable set Score=Score-10 where Id=3; Query OK, 1 row affected (0.38 sec) Rows matched : 1 Changed : 1 Warnings : 0
WHERE 절을 생략하면 테이블의 모든 레코드가 수정되므로 반드시 조건을 명시하는 것이 안전합니다.
5. 변경 결과 확인하기
다시 한번 SELECT 문으로 테이블을 조회하여 결과를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+----+-------+ | Id | Score | +----+-------+ | 1 | 67 | | 2 | 78 | | 3 | 80 | | 4 | 56 | +----+-------+ 4 rows in set (0.00 sec)
Id가 3인 레코드의 Score가 90에서 80으로 10만큼 감소한 것을 확인할 수 있습니다. 같은 원리로 Score = Score + 10, Score = Score * 2 등 다양한 산술 연산도 응용할 수 있습니다.