(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 : "중복 등록 또는 서버 에러"
});
}
}
'mariaDB > 3. SQL 사용법' 카테고리의 다른 글
| EXISTS 문법 (0) | 2025.05.19 |
|---|---|
| 좋아요 총 개수 보내주기 (개별 도서 조회) (1) | 2025.05.19 |
| 데이터베이스 페이징 (1) | 2025.05.16 |
| SQL 시간 범위 구하기 (DATE_ADD, SUB) (0) | 2025.05.16 |
| JOIN vs LEFT JOIN 비교 (0) | 2025.05.16 |