MySQL - UPDATE 쿼리로 여러 테이블 값 업데이트 하기, MySQL/MSSQL Multi-Table Update 지원 여부

반응형

개요

하나의 UPDATE 쿼리에 여러 개의 테이블이 조인되어 있는 상황을 볼 수 있다.
이는 참조되어 있는 다른 테이블의 값을 확인하여 대상이 되는 테이블의 값을 수정하기 위함인데,
가끔 참조하는 테이블까지 같이 수정해야 하는 경우가 있다.
 
예를 들어,
이름과 주소가 각각 다른 테이블에 되어 있을 때,
공통되는 키를 참조하여 조인을 해서 번거롭게 여러 번의 UPDATE 쿼리문을 작성해야 한다.

-- t1 : id, name
UPDATE t1 
SET 
    name = 'eunbyeol';

-- t2 : id, address
UPDATE t2 
SET 
    address = 'incheon';

 
한 두 번이면 상관없지만...
반복되는 업데이트 쿼리문을 작성하기에는 솔직히 조금 귀찮다.
이 경우, 조인을 해서 한꺼번에 업데이트하는 방법이 없을까?
이번 포스팅에서는 MySQL에서 다중 테이블을 UPDATE 한 번에 여러 개의 값을 수정하는 방법을 다룬다.


Multi-Table Update 지원 여부

멀티 테이블 업데이트(다중 테이블 업데이트)란,
UPDATE 문을 사용하여 여러 테이블을 동시에 업데이트하는 기능을 말한다.
 

MySQL에서는...

멀티 테이블 업데이트 기능을 제공한다.
하지만 ORDER BY 또는 LIMIT 절을 함께 사용할 수 없다.
 

MS-SQL에서는...

안타깝게도 멀티 테이블 업데이트 기능을 제공하지 않는다.


테스트용 테이블 설정

테스트 테이블 생성

테스트를 진행할 테이블을 생성해 주자.

  • t1 : 인덱스, 이름
  • t2 : 인덱스, 주소
  • 각 테이블의 'id' 컬럼은 서로 참조된다.
CREATE TABLE t1 (
    id INT,
    name NVARCHAR(20)
);

CREATE TABLE t2 (
    id INT,
    address NVARCHAR(50)
);

테스트 값 추가

  • t1 테이블
    • 인덱스 : 1
    • 이름 : eunbyeol
  • t2 테이블
    • 인덱스 : 1
    • 주소 : incheon
insert into t1 select 1, 'eunbyeol';
insert into t2 select 1, 'incheon';

하나의 업데이트 쿼리문으로 다중 테이블 값 수정하기

다중 테이블 조인 업데이트 쿼리 구문

업데이트 구문은 똑같다.
다른 점은 대상이 되는 테이블명 다음 절에 JOIN 절을 넣어준다.
그리고 SET 절에 수정할 여러 테이블의 컬럼을 기입해 주면 된다.

UPDATE 테이블명1
        INNER JOIN
    테이블명2 ON 테이블명1.컬럼1 = 테이블명2.컬럼1 
SET 
	-- 업데이트할 값 입력
    테이블명1.컬럼1 = ~ ,
    테이블명2.컬럼1 = ~
-- 조건이 존재할 경우 조건 입력
WHERE
	조건;

예시 구문

위에서 생성한 t1, t2 테이블을 이용하여 각각의 값을 업데이트해 보자.

  • 각 테이블을 조인한 결과를 확인해 보기
SELECT 
    t1.id, t1.name, t2.address
FROM
    t1
        INNER JOIN
    t2 ON t1.id = t2.id;

 

  • 업데이트 쿼리 하나로 두 개의 테이블 한꺼번에 수정하기
UPDATE t1
        INNER JOIN
    t2 ON t1.id = t2.id 
SET 
    t1.name = 'EunbyeolKo',
    t2.address = 'Seogu-Incheon';


추가 정보

해당 사항은 MySQL에서는 정상 작동하였으나, MS-SQL에서는 구문이 먹히지 않는다.
 

반응형