Extra Form
PHP PHP 8.1
CMS Rhymix 2.0

추가

tests/_data/dbquery/insertTest.xml 파일에 예제가 있네요.

하지만 UPDATE 상황이 발생했을 때 columns태그에 아래에 지정된 칼럼 전체가 아닌 일부 칼럼만 update될 수 있도록하고 싶은데 방법이 있을까요?


안녕하세요, ON DUPLICATE KEY UPDATE (upsert) query를 사용하고자 합니다.

하지만 설명서도 없고 코어에 포함된 xml query 파일 중 updateduplicate 속성이 있는 것을 찾지 못했습니다.

따라서 예시가 없는 관계로 사용에 어려움을 겪고 있습니다.

 

개발자분들 중 사용해 보신 경험이 있다면 사용법을 공유하여 주시면 감사드리겠습니다.

  • profile
    https://github.com/rhymix/rhymix/pull/1332

    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 쿼리를 추가로 실행하는 방법을 권장합니다. 가능하면 한 번에 성공하는 쿼리의 비율을 높이는 것이 빠르고 안정적이기 때문입니다.
  • profile ?
    답변 감사드립니다. 상단에 추가된 질문처럼 사용하는 방법 혹시 알고 계신가요?
  • ? profile

    기본 제공되는 xml 쿼리 문법에는 업데이트할 컬럼 목록을 따로 지정하는 기능이 없습니다. 따라서 insert를 시도한 컬럼 목록을 그대로 사용합니다.

     

    일부 컬럼만 업데이트되도록 하려면 커스텀 쿼리 기능을 사용해서 upsert 쿼리 내용을 직접 작성하시거나, insert 또는 update를 먼저 시도한 후 오류가 발생하는 것을 캐치하여 원하시는 방식으로 다시 쿼리하면 됩니다.