mariaDB/3. SQL 사용법

두 컬럼의 값을 한 쌍으로 제약조건 만들기

bbomkim 2025. 5. 19. 20:31

(user_id, book_id) 한 쌍UNIQUE 조건으로 제약 걸기

도서 구매 사이트에서 좋아요 API를 구현중에,

"하나의 도서에는 하나의 유저 좋아요만 등록할 수 있다" 는 조건을 로직이 아닌 DB에서 걸러야 한다고 판단했다.

위 조건을 충족 시키려면 하나의 값에 UNIQUE 제약 조건을 거는게 아니라,

컬럼 값 2개를 묶어서 UNIQUE 제약 조건을 걸 수 있어야 한다.

 

mariadb에서는 그게 가능했다.

ALTER TABLE likes
ADD CONSTRAINT unique_like UNIQUE (user_id, book_id);

 

 


좋아요 등록 API 예시 코드 

// 좋아요 등록
async function addLike (req, res) {
  try {
    const {user_id} = req.body;
    const {book_id} = req.params;
    
    // DB TABLE안에서 이미 (user_id, book_id) 한 쌍으로 UNIQUE 제약을 걸어두었다.
    // 그래서 API내에서 따로 중복 좋아요 처리를 할 필요가 없다.
    const conn = await dbConnection;
    const [result] = await conn.query(
      `INSERT INTO book_store.likes (user_id, book_id)
      VALUES (?, ?)`,
      [user_id, book_id]
    )
    console.log("result : ",result)
    if(result.affectedRows === 0) {
      return res.status(StatusCodes.BAD_REQUEST).json({
        message : "좋아요 등록 실패"
      });
    }
    return res.status(StatusCodes.CREATED).json({
      message : "좋아요 등록됨"
    });
  }
  catch(err) {
    console.log("err : ",err);
    res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
      success : false,
      message : "중복 등록 또는 서버 에러"
    });
  }
}