[mysql] ON DUPLICATE KEY UPDATE, 다수 INSERT

Subin Park·2022년 5월 23일

ON DUPLICATE KEY UPDATE란?

INSERT 시 PK 또는 UK로 중복된 값이 있을 시에 INSERT가 아닌 지정된 컬럼, 지정된 값을 UPDATE 하는 명령어를 의미한다.

-- 사람에 대한 정보를 담은 테이블, PK = name
INSERT INTO TB_PEOPLE(name, age, gender)
VALUES
(
	#{people.name},
	#{people.age},
	#{people.gender}
)
ON DUPLICATE KEY UPDATE age = #{age} , gender = #{gender}

단일 INSERT/UPDATE 문의 경우 위의 쿼리로도 문제가 없다.

하지만 만약 여러명의 사람 정보를 한번에 INSERT 해야하는 경우는 어떻게 해야할까?

INSERT INTO TB_TABLE(name, age, gender)
VALUES
<foreach item="people" collection="list" separator=",">
		(
		#{people.name},
		#{people.age},
		#{people.gender}
	)
</foreach>

mybatis를 통해 여러개의 사람 정보를 List로 받아 INSERT 해야하는 상황이다. 이 경우 foreach 내부의 값은 지역변수이기 때문에 foreach 외부에서는 사용할 수 없는 상황이다.
이를 해결하기 위한 방법으로 VALUES(컬럼명)을 사용하는 것이다.

VALUES(컬럼명)이란?

지정되어 있는 컬럼에 들어올 값을 뜻한다.

INSERT INTO TB_TABLE(name, age, gender)
VALUES
<foreach item="people" collection="list" separator=",">
		(
		#{people.name},
		#{people.age},
		#{people.gender}
	)
</foreach>
ON DUPLICATE KEY UPDATE age = VALUES(age), gender = VALUES(gender)

위의 예제와 같이 foreach로 List의 값을 insert 하고 만약 중복된 키가 있을 시 'ON DUPLICATE KEY UPDATE'를 실행하며 현재의 age와 gender의 값을 UPDATE하게 되는 것이다.

0개의 댓글