MySQL 데이터 삭제하는 방법
- DELETE
```sql
DELETE FROM 테이블명 (WHERE 조건);
-- 조건이 없으면 모든 행이 삭제된다.
2. DROP
```sql
DROP TABLE 테이블명;
-- 테이블을 통쩨로 삭제
- TRUNCATE
```SQL
TRUNCATE 테이블명;
-- 모든 행이 삭제됩니다.(테이블은 당연히 남아있다)
**DELETE는 fk를 들고있는 테이블을 먼저 지우는것이 좋다.**
## Error Code: 1175
가장 최상위 테이블인 orderedBooks를 삭제하려고 보니 오류가 난다. 에러코드 1175이다. 이를 해결하는 방법은 다음과 같다.
설정에 들어가서 safe updates 를 비활성화해준 후 워크벤치를 껐다 키면 간단하게 해결된다.
## DELETE와 TRUNCATE의 차이
DELETE와 TRUNCATE는 같은 기능을 제공하는것처럼 보인다. 하지만 둘에는 차이점이 있다.
DELETE로 지우면 auto increment 값이 초기화 되지 않는다. TRUNCATE를 사용하면 이 값도 같이 초기화 된다.
## Error Code: 1701
order 테이블을 TRUNCATE 하려고 보면 1701 오류가 난다. 다른 테이블에서 참조하고 있기 때문이라고 메시지에 나온다. 이를 어떻게 해결해야할까?
참조 관계를 아예 삭제하는 방법도 있다. 하지만 이보다 더 간단한 방법이 있다.
```sql
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE 전에 이 설정을 해주면 외래키를 체크하지 않는다. 이제 삭제가 잘 될 것이다.
삭제가 다 끝난 다음 설정을 원상복구 시켜줘야한다.
SET FOREIGN_KEY_CHECKS = 1;
새로운 오류 Cannot set properties of undefined
이제 노드를 실행시켜보면 디비에 데이터가 잘 저장되는것을 볼수 있다. 하지만 마지막에 result를 받아오는 과정에서 오류가 발생한다.
sql = `INSERT INTO orders (book_title, total_quantity, total_price, user_id, delivery_id)
VALUES (?, ?, ?, ?, ?);`
values = [];
values = [first_book_title, total_quantity, total_price, user_id, delivery_id];
[results] = await conn.execute(sql, values);
let order_id = results.insertId;
위의 경우에는 배열의 요소로 results 하나만 반환되지만
sql = `INSERT INTO orderedBooks (order_id, book_id, quantity) VALUES ?;`;
values = [];
items.forEach((item) => {
values.push([order_id, item.book_id, item.quantity])
})
results = await conn.query(sql, [values]);
return res.status(StatusCodes.OK).json(results[0]);
이 경우에는 배열에 results 하나와 null이 같이 반환된다. 따라서 배열을 통째로 받고 첫번째 index를 사용하면 된다.
구매한 상품 장바구니 삭제
DELETE 문을 이용해 장바구니에서 구매된 상품을 삭제한다.
DELETE FROM cartItems WHERE id IN (1,2,3);
Promise SELECT
// items를 가지고, 장바구니에서 book_id, quantity 조회
sql = 'SELECT book_id, quantity FROM cartItems WHERE id IN (?)';
let [rows, fields] = await conn.query(sql, [items]);
promise가 들어간 select문은 다른 방식으로 결과 값을 받아온다. results로 하나로 받는게 아닌 rows와 fields 두가지 결과를 받는다.
후기
DELETE 와 TRUNCATE의 차이점에 대해서 학습하였다. promist를 활용한 데이터 처리도 해보았다.
키워드: 프로그래머스 데브코스, 국비지원교육, 코딩부트캠프
'프로그래머스 풀스택 데브코스 > 데브코스 TIL' 카테고리의 다른 글
웹 풀사이클 데브코스 TIL 41일차 (0) | 2024.01.15 |
---|---|
웹 풀사이클 데브코스 TIL 40일차 (0) | 2024.01.12 |
웹 풀사이클 데브코스 TIL 38일차 (0) | 2024.01.10 |
웹 풀사이클 데브코스 TIL 37일차 (0) | 2024.01.10 |
웹 풀사이클 데브코스 TIL 36일차 (0) | 2024.01.09 |