Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

단일 쿼리로 MySQL 데이터를 일괄 업데이트하는 방법은 무엇입니까?

<시간/>

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)