ddodoi 님의 블로그
8주차-파트04: MySQL 에러: errno: 121, Foreign Key 제약조건, IN, SQL로 배열 값 받기 본문
웹풀스택 일일정리
8주차-파트04: MySQL 에러: errno: 121, Foreign Key 제약조건, IN, SQL로 배열 값 받기
ddodoi 2024. 10. 13. 20:17CHAPTER 1. MySQL 에러: errno: 121 "Duplicate key on write or update
cartItems테이블의 foreign키를 설정하던 중 에러가 발생하였다.
에러명 : errno: 121 "Duplicate key on write or update
이유는 즉슨 foreign key 제약조건의 이름이 예전에 설정해둔 것과 같아서였다. 따라서 제약 조건명을 바꾸어주면 된다.
cartItems테이블의 book_id와 user_id는 각각 books테이블의 id, users테이블의 id를 참조한다. 근데 이 두 칼럼은 likes테이블에서도 참조하고 있다.
MySQL에서 foreign키를 연결 해줄 때 Foreign Key 제약조건 Name을 직접 설정해줄 수 있다. 다음 사진은 cartItems에서 foregin키를 설정해주는 모습으로 제약조건명이 book_id, user_id이다.
다음 사진은 likes테이믈에서 foreign키 제약조건을 설정했던 것이로 제약조건명 중 이름이 user_id인것이 있다. 이것이 겹쳐서 오류가 난 것이다.
<foreign key 제약조건 이름짓기>
fk기준 테이블명 참조테이블명 참조키
ex)
cartItems.users_id > users.id : fk_cartItems_users_id
likes.user_id > users.id : fk_likes_users_id
CHAPTER 2. IN
✔️IN : 조회하고자 하는 값이 여러개일때 데이터를 목록에 넣어 지정한다.
여러개의 목록 값중 하나라도 만족하면 조건에 해당하는 결과를 출력한다.
CHAPTER 3. SQL로 배열 값 받기
sql문에 여러개 입력 받을 곳을 (?)로 표기한 뒤 그대로 배열을 받아 넣어주면 된다.
//장바구니에서 아이템 조회
const getCartItems = (req, res) =>{
const {user_id, selected} = req.body;
let sql = `SELECT cartItems.id, book_id, title, quantity, price FROM Bookshop.cartItems
LEFT JOIN Bookshop.books ON books.id = cartItems.book_id
WHERE cartItems.user_id = ? AND cartItems.id IN (?)`;
let values = [user_id, selected];
conn.query(sql, values, (err, results) =>{
if (err){
console.log(err)
return res.status(StatusCodes.BAD_REQUEST).end();
}
return res.status(StatusCodes.OK).json(results);
})
};
'웹풀스택 일일정리' 카테고리의 다른 글
9주차-파트01: Node.js의 비동기 처리 방식 (0) | 2024.10.14 |
---|---|
8주차-파트05: MySQL error: error code 1366, LAST_INSERT_ID(), MAX(), insertId (1) | 2024.10.14 |
8주차-파트02: SAFE MODE 해제, count(), AS, 서브쿼리, EXISTS (0) | 2024.10.12 |
8주차-파트01: LEFT JOIN, MYSQL에서 시간 구하기, 페이징(Paging) (0) | 2024.10.10 |
7주차-파트05: Lorem Picsum, URL이 같을 경우 (0) | 2024.10.05 |