25 lines
1.0 KiB
SQL
25 lines
1.0 KiB
SQL
-- 게임 좋아요 서버 영속화: (game_id, user_key) 사용자별 1회 좋아요 멱등 보장
|
|
-- 적용 전 반드시 중복 row 점검 후, 중복이 있으면 제거하고 제약 추가할 것.
|
|
-- 이 파일은 작성만 한다. DB 적용은 orchestrator 가 사용자 확인 후 수행.
|
|
|
|
-- 1) 중복 점검 (적용 전 실행, 결과가 0행이어야 안전)
|
|
SELECT game_id, user_key, COUNT(*)
|
|
FROM game_likes
|
|
GROUP BY game_id, user_key
|
|
HAVING COUNT(*) > 1;
|
|
|
|
-- 2) (중복이 있을 경우) 최신 1건만 남기고 제거 — 점검 결과 확인 후 수동 실행
|
|
-- DELETE FROM game_likes gl
|
|
-- USING game_likes keep
|
|
-- WHERE gl.game_id = keep.game_id
|
|
-- AND gl.user_key = keep.user_key
|
|
-- AND gl.id < keep.id
|
|
-- AND keep.id = (SELECT MAX(id) FROM game_likes x WHERE x.game_id = gl.game_id AND x.user_key = gl.user_key);
|
|
|
|
-- 3) UNIQUE 제약 추가
|
|
ALTER TABLE game_likes
|
|
ADD CONSTRAINT uq_game_likes_game_user UNIQUE (game_id, user_key);
|
|
|
|
-- 롤백:
|
|
-- ALTER TABLE game_likes DROP CONSTRAINT uq_game_likes_game_user;
|