개요
MySQL에서는 UPDATE 문과 WHERE 절을 함께 사용하면 특정 조건을 만족하는 행만 골라서 열 값을 감소시킬 수 있습니다. 이 글에서는 예제 테이블을 만들고, 30보다 큰 Score 값에서 2를 빼는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Score int
);
Query OK, 0 rows affected (0.65 sec)Score라는 int 타입의 열 하나를 가진 DemoTable이 생성되었습니다.
2. 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable values(45); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(29); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(56); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(24); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(32); Query OK, 1 row affected (0.09 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Score | +-------+ | 45 | | 29 | | 56 | | 24 | | 32 | +-------+ 5 rows in set (0.00 sec)
4. 조건에 따라 값을 빼서 업데이트하기
다음은 조건을 만족하는 행에서만 값을 빼서 MySQL 열을 업데이트하는 쿼리입니다. 여기서는 Score가 30보다 큰 행에 한해 2를 뺍니다.
mysql> update DemoTable set Score=Score-2 where Score > 30; Query OK, 3 rows affected (0.14 sec) Rows matched: 3 Changed: 3 Warnings: 0
WHERE 절에 Score > 30이라는 조건을 지정했기 때문에, 45, 56, 32 세 개의 행만 업데이트되었습니다. 나머지 29와 24는 조건에 해당하지 않아 그대로 유지됩니다.
5. 업데이트 결과 확인하기
테이블의 레코드를 다시 한번 조회해 결과를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+ | Score | +-------+ | 43 | | 29 | | 54 | | 24 | | 30 | +-------+ 5 rows in set (0.00 sec)
결론
UPDATE 문에서 SET 열이름 = 열이름 - 값 형태로 작성하면 기존 값에서 원하는 만큼 값을 뺄 수 있으며, WHERE 절을 활용하면 조건을 만족하는 행만 선택적으로 업데이트할 수 있습니다. 이 방식은 재고 수량 차감, 포인트 차감 등 실무에서 매우 자주 사용되는 패턴이므로 꼭 익혀두시기 바랍니다.