당신 만 ON DUPLICATE KEY
지역에 하나의 충돌 행의 맥락에서 변경을 할 수 있습니다. 또한, 이것은 내가 아는 한, INSERT
성명의 자산입니다.
필요한 것은 저울에서 더하기와 빼기를 기록한 후 간단한 수동 대장을 사용하여 수동으로 또는 트리거를 사용하여 표로 정리하는 것입니다.
INSERT INTO points_adjustments (boardId_from, boardId_to, points)
VALUES (?, ?, ?)
이보다 쉽게 항목의 쌍으로 표현 될 수 있습니다 :
예를 들어, 가장 간단한 방법은 당신은 + N 포인트에 대해 하나 개의 항목을 추가 할 것
INSERT INTO points_adjustments (boardId, points)
VALUES (?, ?)
하고, -n에 대해 일치하는 것. 언제든지 SUM(points)
을 사용하여 균형을 잡을 수 있습니다. 이 값을 VIEW
으로 마무리하면 쉽게 검색 할 수 있습니다. 원한다면 합계를 트리거를 사용하여 다른 테이블의 열로 비정규화할 수도 있습니다.
간단한 트리거는 영향을받는 각 boardId
에 대해 다음 문을 실행합니다 : 이것은 처음에 키 충돌을 방지하고 발생한 거래의 감사 기록을 제공
INSERT INTO balances (boardId, points) VALUES (?, ?)
ON DUPLICATE KEY SET points=points+VALUES(points)
.
어쨌든이 모든 작업을 자동으로 수행하려면 아마도 트리거를 사용해야 할 것입니다.
내 생각에 2 (ish) 쿼리와 if/else 블록을 사용하면이 방법이 더 간단해질 것입니다. 이런 식으로하고 싶은 특별한 이유가 있습니까? – landons
언어의 장점을 최대한 활용하는 것이 좋습니다. 그것은 물건을 발견하고, 가능한 한 빨리 물건을 만드는 것에 관한 것입니다. –
프로덕션 환경에 배포 된 경우 이것이 [적절한 SQL 회피] (http://bobby-tables.com/)가되기를 정말로 바랍니다. 그런 나체 변수를 보는 것은 걱정입니다. – tadman