CASE 명령을 사용하여 하나의 쿼리로 MySQL 데이터를 대량 업데이트할 수 있습니다. 구문은 다음과 같습니다 -
update yourTableName set yourUpdateColumnName = ( Case yourConditionColumnName WHEN Value1 THEN ‘’UpdatedValue’ WHEN Value2 THEN ‘UpdatedValue’ . . N END) where yourConditionColumnName IN(Value1,Value2,.....N);
위의 개념을 이해하기 위해 테이블을 만들어 보겠습니다. 테이블을 생성하는 쿼리는 다음과 같습니다 -
mysql> create table UpdateAllDemo −> ( −> BookId int, −> BookName varchar(200) −> ); Query OK, 0 rows affected (1.18 sec)
삽입 명령을 사용하여 테이블에 일부 레코드를 삽입하십시오. 레코드를 삽입하는 쿼리는 다음과 같습니다 -
mysql> insert into UpdateAllDemo values(1000,'Introduction to C'); Query OK, 1 row affected (0.15 sec) mysql> insert into UpdateAllDemo values(1001,'Introduction to Java'); Query OK, 1 row affected (0.21 sec)
select 문을 사용하여 테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다 -
mysql> select *from UpdateAllDemo;
다음은 출력입니다 -
+--------+----------------------+ | BookId | BookName | +--------+----------------------+ | 1000 | Introduction to C | | 1001 | Introduction to Java | +--------+----------------------+ 2 rows in set (0.00 sec)
이제 일괄 업데이트를 수행합니다. 즉, 업데이트
-
'C in Depth' 값이 있는 'Introduction to C' 값 및
-
값 'Java in Depth'와 함께 'Introduction to Java'.
위와 같이 CASE 명령을 사용할 수 있습니다. 쿼리는 다음과 같습니다 -
mysql> update UpdateAllDemo −> set BookName = (CASE BookId WHEN 1000 THEN 'C in Depth' −> when 1001 THEN 'Java in Depth' −> END) −> Where BookId IN(1000,1001); Query OK, 2 rows affected (0.24 sec)
이제 테이블에서 값이 업데이트되었는지 또는 select 문을 사용하지 않았는지 확인할 수 있습니다.
테이블에서 업데이트된 값을 확인하는 쿼리는 다음과 같습니다. -
mysql> select *from UpdateAllDemo;
다음은 일괄 업데이트가 성공했음을 표시하는 출력입니다. -
+--------+---------------+ | BookId | BookName | +--------+---------------+ | 1000 | C in Depth | | 1001 | Java in Depth | +--------+---------------+ 2 rows in set (0.00 sec)