본문 바로가기
MySql

MySQL 중복 키 업데이트에 대한 업데이트

by 베이스 공부 2021. 1. 19.
반응형

상점 ID와 플레이어 ID, 플레이어 포인트가 포함 된 테이블이 있습니다. What I want to do is transfer points from a shop to the other, the thing is that shop id and players id form a unique index. What I want to do is on duplicate key update, instead of let it fail, to add the points of one entry to the other and delete the "from" entry. 다음과 같은 것 :

UPDATE `playerspoints`
SET `boardId`=$to
WHERE `boardId`=$from
ON DUPLICATE KEY UPDATE `points`=.... get the idea?

 

해결 방법

 


필요한 것은 잔액에서 더하기와 빼기를 기록한 다음 수동으로 또는 트리거를 사용하여 표로 만드는 간단한 원장입니다.

예를 들어 가장 간단한 방법은 다음과 같습니다.

INSERT INTO points_adjustments (boardId_from, boardId_to, points)
  VALUES (?, ?, ?)

이것은 한 쌍의 항목으로 더 쉽게 표시 될 수 있습니다.

INSERT INTO points_adjustments (boardId, points)
  VALUES (?, ?)

+ n 포인트에 대해 하나의 항목을 추가하고 -n에 대해 일치하는 항목을 추가합니다. 언제든지 SUM (포인트) 을 사용하여 잔액을 얻을 수 있습니다. 이를 VIEW 로 래핑하여 검색을 더 쉽게 만들거나 원하는 경우 트리거를 사용하여 합계를 다른 테이블의 열로 비정규화할 수 있습니다.

간단한 트리거는 영향을받는 각 boardId 에 대해 다음 문을 발행합니다.

INSERT INTO balances (boardId, points) VALUES (?, ?)
  ON DUPLICATE KEY SET points=points+VALUES(points)

이는 처음에 키 충돌을 방지하고 발생한 트랜잭션에 대한 감사 가능한 기록을 제공합니다.

어쨌든이 모든 작업을 자동으로 수행하려면 트리거를 사용해야합니다.

 

참조 페이지 https://stackoverflow.com/questions/13466647

 

 

반응형

댓글