[Trigger] 좋아요 처리/해제에 따른 게시글 좋아요 수 증감 기능 만들기

beans·2022년 12월 1일
0

좋아요는 Liked 테이블에 등록한다. 좋아요도 댓글과 마찬가지로 게시글에 대한 좋아요가 처리되는 것이기 때문에 게시글이 없을 경우 좋아요 또한 존재할 수 없다. 그러므로 좋아요 레코드는 게시글의 정보를 항상 포함하여야 한다.

(이하 생략)

좋아요의 경우 Liked 테이블에 별도로 게시글 별 좋아요 수와 좋아요한 사용자 목록을 insert할 것이다. 특정 게시글이 좋아요가 1개라도 된다면 Liked 테이블에 해당 게시글에 대한 레코드가 삽입될 것이기 때문에 이후부터는 insert가 아닌 update가 이루어져야 한다. 좋아요를 해제하는 경우도 update를 사용할 것이다.

하지만 클라이언트에서 게시판의 글 목록을 보여줄 때는 쿼리가 한 번만 요청될 수 있도록 좋아요 갯수 정보를 불러오는 것은 Board 테이블에서 할 것이다. 따라서 Liked 테이블에 insert, update가 발생할 때 trigger로 Liked 테이블의 likeCnt를 Board 테이블의 likeCnt로 동기화 시켜줄 것이다. 이 때, 해당 게시글에 대한 좋아요 갯수가 저장되어야 하므로 Board 테이블에 있는 고유 번호인 idx와 Liked 테이블에 있는 parentIdx 필드가 일치하는 부분에 대해서만 likeCnt를 업데이트 해야 한다.

1 새 트리거 생성

Liked → Triggers 마우스 우클릭, Create New Trigger

2 트리거 이름 생성

3 트리거 코드 작성

  • on_liked_insert
    • Liked 테이블에 게시글에 대한 좋아요 정보가 없다가 새로 insert된 경우

      CREATE DEFINER=`cube`@`%` TRIGGER on_like_insert
      AFTER INSERT
      ON Liked FOR EACH ROW
      BEGIN 
      	UPDATE Board SET Board.likeCnt = NEW.likeCnt
      	WHERE idx  = NEW.parentIdx ;
      END
  • on_liked_update
    • Liked 테이블에 게시글에 대한 좋아요 정보가 과거에 이미 있었던 경우

      CREATE DEFINER=`cube`@`%` TRIGGER on_like_update
      AFTER UPDATE 
      ON Liked FOR EACH ROW
      BEGIN 
      	UPDATE Board SET Board.likeCnt = NEW.likeCnt
      	WHERE idx  = NEW.parentIdx ;
      END

4 트리거 저장

Ctrl + S 로 저장

0개의 댓글