추가
tests/_data/dbquery/insertTest.xml 파일에 예제가 있네요.
하지만 UPDATE 상황이 발생했을 때 columns태그에 아래에 지정된 칼럼 전체가 아닌 일부 칼럼만 update될 수 있도록하고 싶은데 방법이 있을까요?
안녕하세요, ON DUPLICATE KEY UPDATE (upsert) query를 사용하고자 합니다.
하지만 설명서도 없고 코어에 포함된 xml query 파일 중 updateduplicate 속성이 있는 것을 찾지 못했습니다.
따라서 예시가 없는 관계로 사용에 어려움을 겪고 있습니다.
개발자분들 중 사용해 보신 경험이 있다면 사용법을 공유하여 주시면 감사드리겠습니다.
ON DUPLICATE KEY UPDATE (업서트) 사용 가능
INSERT 쿼리에 update-duplicate 속성을 추가하면 PRIMARY KEY 또는 UNIQUE 인덱스가 중복되는 경우 UPDATE 쿼리로 자동 변경됩니다. 흔히 "업서트"라고 알려진 기능으로, MySQL 사용시 매우 유용한 기능인데 지금까지 지원되지 않아 불편이 있었습니다.
<query id="insertMyStatistics" action="insert" update-duplicate="true">
... 중략 ...
</query>
※ update-duplicate 속성의 값은 참으로 해석될 만한 것이라면 무엇이든 상관없으나, true 또는 Y를 사용할 것을 권장합니다.
※ XML 스키마에서 참/거짓이 들어가는 속성에 공통으로 적용되는 내용입니다.
※ 속성 이름의 하이픈(-)을 생략하거나 언더바(_)로 대체하여도 무방합니다. 기존에 지원하던 속성들 중 일부는 하이픈, 일부는 언더바를 사용하여 일관성이 없었기 때문에 모두 지원하는 것으로 변경했습니다.
※ 업서트는 중복 가능성이 낮은 경우에만 사용하는 것을 권장합니다. 중복이 발생할 가능성이 높은 경우에는 UPDATE 쿼리를 먼저 실행한 후 getAffectedRows()의 결과에 따라 INSERT 쿼리를 추가로 실행하는 방법을 권장합니다. 가능하면 한 번에 성공하는 쿼리의 비율을 높이는 것이 빠르고 안정적이기 때문입니다.