Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 단일 WHERE 절로 여러 행을 한 번에 업데이트하는 방법

MySQL에서 여러 행을 개별적으로 업데이트하려면 각 행마다 UPDATE 문을 실행해야 한다고 생각하기 쉽습니다. 하지만 IN() 연산자를 사용하면 단일 WHERE 절만으로 여러 행을 한 번에 효율적으로 수정할 수 있습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1420
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstName varchar(20),
    -> LastName varchar(20),
    -> Age int
    -> );
Query OK, 0 rows affected (1.12 sec)

위 테이블은 자동 증가(AUTO_INCREMENT) 기본키인 Id와 이름, 성, 나이 컬럼으로 구성되어 있습니다.

2. 샘플 데이터 삽입하기

INSERT 문을 사용하여 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable1420(FirstName,LastName,Age) values('Chris','Brown',23);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1420(FirstName,LastName,Age) values('David','Miller',22);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1420(FirstName,LastName,Age) values('John','Smith',24);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1420(FirstName,LastName,Age) values('John','Doe',21);
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable1420(FirstName,LastName,Age) values('Adam','Smith',25);
Query OK, 1 row affected (0.18 sec)

3. 데이터 조회하기

SELECT 문으로 테이블에 저장된 전체 레코드를 확인합니다.

mysql> select * from DemoTable1420;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+-----------+----------+------+
| Id | FirstName | LastName | Age  |
+----+-----------+----------+------+
|  1 | Chris      | Brown      |  23 |
|  2 | David      | Miller    |  22 |
|  3 | John       | Smith      |  24 |
|  4 | John       | Doe        |  21 |
|  5 | Adam       | Smith      |  25 |
+----+-----------+----------+------+
5 rows in set (0.00 sec)

4. 단일 WHERE 절로 여러 행 업데이트하기

이제 핵심인 업데이트 쿼리입니다. WHERE 절에서 IN() 연산자에 여러 개의 Id 값을 지정하면 해당 조건에 일치하는 모든 행이 한 번에 수정됩니다.

mysql> update DemoTable1420
    -> set FirstName='Carol',LastName='Taylor'
    -> where Id IN(1,3,4,5);
Query OK, 4 rows affected (0.42 sec)
Rows matched: 4  Changed: 4 Warnings: 0

실행 결과를 보면 4개의 행이 일치하고 4개의 행이 실제로 변경되었습니다. Id가 1, 3, 4, 5인 행들의 FirstName과 LastName이 'Carol Taylor'로 일괄 변경된 것입니다.

5. 변경 결과 확인하기

테이블 레코드를 다시 조회하여 업데이트가 정상적으로 적용되었는지 확인해 보겠습니다.

mysql> select * from DemoTable1420;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+-----------+----------+------+
| Id | FirstName | LastName | Age  |
+----+-----------+----------+------+
|  1 | Carol      | Taylor    | 23    |
|  2 | David      | Miller    | 22    |
|  3 | Carol      | Taylor    | 24    |
|  4 | Carol      | Taylor    | 21    |
|  5 | Carol      | Taylor    | 25    |
+----+-----------+----------+------+
5 rows in set (0.00 sec)

결과를 보면 Id 1, 3, 4, 5번 행의 이름이 모두 'Carol Taylor'로 변경되었고, 조건에 포함되지 않은 Id 2번 행(David Miller)은 그대로 유지되었습니다.

정리

단일 WHERE 절로 여러 행을 업데이트할 때는 WHERE Id IN(값1, 값2, ...) 형식의 IN() 연산자를 활용하면 됩니다. 이 방법은 여러 UPDATE 문을 반복 실행하는 것보다 코드가 간결할 뿐만 아니라 데이터베이스와의 통신 횟수도 줄어들어 성능 면에서도 유리합니다.