MySQL에서 테이블의 모든 행이 아닌, 특정 조건(범위)에 해당하는 레코드만 선택적으로 업데이트하고 싶은 경우가 자주 있습니다. 이때는 UPDATE 문과 WHERE 절을 함께 사용하면 됩니다. WHERE 절에 조건을 지정하면 조건을 만족하는 행만 변경되고, 나머지 행은 그대로 유지됩니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable
(
Name varchar(40),
Position int
);
Query OK, 0 rows affected (1.17 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('Chris',90);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David',67);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Bob',55);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Sam',40);
Query OK, 1 row affected (0.15 sec)3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+----------+ | Name | Position | +-------+----------+ | Chris | 90 | | David | 67 | | Bob | 55 | | Sam | 40 | +-------+----------+ 4 rows in set (0.00 sec)
4. 특정 범위의 레코드만 업데이트하기
다음은 전체 열을 수정하지 않고, Position 값이 50보다 크고 90보다 작은 레코드만 골라서 값을 10씩 증가시키는 쿼리입니다.
mysql> update DemoTable
set Position=Position+10
where Position > 50 and Position < 90;
Query OK, 2 rows affected (0.11 sec)
Rows matched : 2 Changed : 2 Warnings : 0실행 결과를 보면 2개의 행이 일치(matched)했고, 2개의 행이 실제로 변경(changed)된 것을 확인할 수 있습니다. 즉, Chris(90)와 Sam(40)은 조건에 해당하지 않아 그대로 유지되고, David(67)와 Bob(55)만 업데이트되었습니다.
참고: WHERE 절을 생략하면 테이블의 모든 행이 업데이트되므로, 부분 업데이트 시에는 반드시 WHERE 절에 정확한 조건을 작성해야 합니다.
5. 업데이트 결과 확인하기
다시 한번 테이블의 레코드를 조회해 결과를 확인해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+----------+ | Name | Position | +-------+----------+ | Chris | 90 | | David | 77 | | Bob | 65 | | Sam | 40 | +-------+----------+ 4 rows in set (0.00 sec)
출력 결과를 보면 David의 Position은 67에서 77로, Bob의 Position은 55에서 65로 각각 10씩 증가했습니다. 반면 Chris(90)와 Sam(40)은 조건 범위에 포함되지 않아 값이 변경되지 않았습니다.
마무리
이처럼 UPDATE 문에 WHERE 절을 활용하면 단 하나의 쿼리로도 원하는 범위의 레코드만 안전하게 업데이트할 수 있습니다. BETWEEN 연산자(where Position between 51 and 89)를 사용해도 동일한 결과를 얻을 수 있으니 상황에 맞게 활용해 보세요.