MySQL에서 하나의 쿼리로 여러 테이블 업데이트
사용자가 논리적으로 관련된 테이블에서 동시 업데이트를 수행하려는 경우가 있을 수 있습니다. 이러한 논리적으로 관련된 테이블은 일부 속성을 통해 서로 연결됩니다.
MySQL에서 하나의 쿼리로 여러 테이블을 업데이트할 때의 이점
테이블 내의 유사한 속성은 업데이트 쿼리를 생성하는 데 사용됩니다. 업데이트 쿼리는 조건에 따라 서로 다른 테이블에서 여러 행 업데이트를 수행합니다.
여러 테이블 업데이트 쿼리는 유사한 상황이 발생할 때 적합합니다. 이 다중 테이블 업데이트 쿼리를 사용하면 다음과 같은 이점이 있습니다.
- 이렇게 하면 각 테이블에서 개별 업데이트를 수행하는 대신 한 번에 행 업데이트가 수행됩니다.
- 이것은 또한 다른 테이블의 항목을 업데이트하는 전체 시간을 줄여줍니다.
- 이렇게 하면 테이블의 일관성 없는 업데이트 가능성이 줄어듭니다.
- 주어진 시간에 모든 테이블에서 유사한 응답.
UPDATE
키워드를 사용하여 MySQL에서 하나의 쿼리로 여러 테이블 업데이트
다중 테이블 업데이트 쿼리에서는 조건을 만족하는 각 레코드가 업데이트됩니다. 조건이 여러 번 일치하더라도 행은 한 번만 업데이트됩니다.
여러 테이블을 업데이트하는 구문은 ORDER BY
및 LIMIT
키워드와 함께 사용할 수 없습니다.
UPDATE
키워드 구문:
UPDATE table1, table2, ...
SET column1 = value1,
column2 = value2,
...
[WHERE conditions]
다중 업데이트는 MySQL 언어에 있는 결합된 키워드가 아닙니다. 구문은 join
키워드와 같이 둘 이상의 테이블을 그룹화하는 데 도움이 되는 다양한 키워드의 조합으로 구성됩니다.
조인 유형은 한 번에 둘 이상의 테이블을 업데이트하는 단일 쿼리를 만드는 데 사용됩니다. 한 번에 여러 테이블을 업데이트하여 이를 이해합시다.
library
및 stu_book
테이블이라는 두 개의 테이블을 고려하십시오. 그리고 도서관에서 학생에게 책이 발행되는 경우를 생각해 보십시오.
도서관에 있는 책의 수는 감소하는 반면, 학생이 있는 책의 수는 증가합니다. 그리고 그것은 두 개의 개별 호출이 필요한 시나리오입니다.
RDBMS 테이블의 개별 업데이트를 피하기 위해 단일 쿼리로 두 테이블의 행을 업데이트합니다. 다음은 업데이트 호출 전에 실행할 명령문 목록입니다.
테이블에 대한 실제 쿼리 이전의 쿼리 목록:
-
library
및stu_book
이라는 두 개의 엔티티를 작성하십시오. -
둘에 대한 스키마는 아래에서 공유됩니다.
-
아래와 같이 표에 몇 가지 공통 값을 개별적으로 삽입합니다.
-
두 테이블에서 동시에 증가 또는 감소를 수행하여 사용 사례를 구현해 보십시오.
MySQL 문을 실행하기 위한 쿼리:
UPDATE library l, stu_book s
SET l.book_count = l.book_count - 2,
s.book_count = s.book_count + 2
WHERE l.id = s.book_id;
위의 쿼리에서 내부적으로 내부 조인은 두 테이블을 결합하고 테이블에 대한 제약 조건을 확인한 후 결합된 테이블에 대해 작동합니다. 키워드를 지정하지 않으면 내부 조인이 적용됩니다.
외부 조인, 오른쪽 외부 조인과 같은 조인은 사용자가 올바른 키워드를 사용해야 합니다. 조인은 그룹화되는 두 테이블에 유사/일치 속성이 있는 경우에만 수행할 수 있습니다.
SET
키워드는 UPDATE
키워드와 함께 사용되어 기존 행에 새 값을 설정합니다. 새 데이터를 덮어써 이전 값을 재정의합니다.
여기 세트는 stu_book
테이블의 도서 수를 업데이트하고 library
도서 수에서 동일한 수의 수가 감소합니다.
두 테이블의 모든 행에 대해 개수가 업데이트되지 않습니다. 대신 WHERE
키워드에 의해 제한이 유지됩니다.
WHERE
키워드는 행의 실제 필터링을 수행합니다. 키워드는 테이블의 조건을 확인한 후 행을 필터링합니다.
여기에서 이 키워드는 library_id
가 stu_book
테이블의 book_id
와 일치해야 한다고 말합니다.
출력에는 두 테이블 모두에서 영향을 받는 총 행 수에 대한 결과가 나열됩니다. 다음은 영향을 받는 행 수를 확인하는 출력입니다.
Query OK, 2 rows affected (0.02 sec)
Rows matched: 2 Changed: 2 Warnings: 0
다음은 로컬 실행 환경 또는 명령 프롬프트에서 위 쿼리에 대한 최종 출력입니다.
로컬 실행 스크린샷:
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn