`.execute()` 로 sql 실행SQL 데이터 삭제 DELETE, TRUNCATE, DROP`DELETE FROM 테이블명 (WHERE 조건);` : 조건에 따라 행이 삭제 > 테이블 유지 (없으면 전체삭제)`DROP TABLE 테이블명;` : 테이블 통째로 삭제`TRUNCATE 테이블명;` : 모든 행 삭제하고 > 테이블 유지 DELETE, TRUNCATE 차이점 : Auto Increment 초기화 해준다!SET foreign_key_checks=0;TRUNCATE cartItems;SET foreign_key_checks=1; SET @count=0;UPDATE orderedBook SET id=@count:=@count+1;ALTER TABLE orderedBook AUTO_INCREMENT..
데브코스
비동기 non-blocking싱글 스레드, 이벤트 기반, 논블로킹 I/O중 논블로킹 I/O == 비동기식 동작 때문에 변수 가 다른 스코프에서 동작하지 않는다작업이 시작된 후 그 작업이 완료될 때까지 기다리지 않고 다음 작업을 계속 수행하는 방식 비동기 발행 : 실행되는 코드가 기다려야 하는 시간이 생긴다. 순서를 기다리지 않고 다음코드 실행한다.setTimeOut(), setInterval(), query()쿼리 실행하는 순간, 끝나기도 전에 뒤의 코드가 실행된다.비동기 처리 : 비동기가 필요없을때 > 쿼리 기다려야할때 등등.... ㅇ이전코드의 시간을 기다리고, 순서대로 실행한다.콜백 함수 : 메소드 실행 할꺼 다 하고, 이 함수 실행해줘(순서 맞춰서 이걸 뒤에 실행해달라고 요청)promis 객체 (r..
주문서 작성 > 주문 APIuser_id 있어야 한다.전체 ERD 테이블 생성 delivery, orders, orderedBook fk 컨벤션 정하고 플젝 시작하기!Ref: orders.delivery_id > delivery.idRef: orderedBook.order_id > orders.idRef: orderedBook.book_id > books.idRef: orders.user_id > users.id 주문 등록 INSERT, 주문된 상품은 DELETE{ items : [{ //orderedBook INSERT cartItemId : 장바구니 도서 id, bookId : 도서 id, quantity: 수량 }, { car..
장바구니에 담겨있는 아이템 APIcartItems 테이블에서 user_id 값으로 식별 cartItems id(PK)book_id(FK)cntuser_id1111232132124 외래키 지정했던 제약조건에 한번 더 같은 이름으로 사용한다면? 충돌, 에러 발생[fk 제약조건 이름짓기]fk_기준 테이블명_참조테이블명_참조키cartItems.uer_id > users.id : fk_catrItems_users_idlikes.user_id > users.id : fk_likes_users_id 장바구니 담기 INSERTconst addToCart = (req, res) => { const { book_id, quantity, user_id } = req.body; let sql = "INSER..
ERD, likes 테이블 생성Table likes{ user_id integer liked_book_id integer}Ref: likes.user_id > users.idRef: likes.liked_book_id > books.id외래키 엮어서 테이블 생성 좋아요 추가누가 좋아요 눌렀는지? 로그인 한 상태 확인 > 토큰값로그인 할때 받은 token > header *Authorization* : payload 값을 읽을 수 있다 > 사용자의 id를 읽을 수 있다.INSERT INTO likes (user_id, liked_book_id) VALUES (1, 1);const addLike = (req, res) => { const { id } = req.params; //book_id con..
☑️What I Learn.env 파일 aka 닷git, 오픈소스에 올리면 안되는 값 (포트, DB 접속 정보, API_KEY 등)dotenv 패키지를 사용하며, 환경변수 파일을 외부에 만들어 저장해서 소스코드 내에서 하드코딩하지 않고 사용한다.애플리케이션의 환경 설정 정보를 저장하는데 사용한다. 1. 환경 변수 저장DB_HOST=localhostDB_USER=rootDB_PASS=s1mpl3API_KEY=12345-abcde*환경변수 : os 에서 프로세스 생성할때 참조하는 변수. 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임 2. 보안 강화.gitignore 파일에 추가해 정보가 외부로 노출되는 것을 막는다. 3. 환경별 설정관리.env.development.env.test...
category 외래키설정하면 컬럼명 앞에 붉은색이 된다. SELECT 별칭, 요약정보ASSELECT name AS category_name FROM books LEFTJOIN category ON books.category_id = category_id; 업데이트ERD 다이어그램 books N : 1 category외래키 연결?Ref: books.category_id > category.id 코드 BookController.jslet sql = `SELECT * FROM books LEFT JOIN category ON books.category_id = category_id WHERE books.id = ?`; 출간기준 시간 범위 구하기MySQL시간 더하기DATE_ADD(기준일자, 간격INTERV..
ERD books//전체조회 + 개별 조회 + 카테고리Table books{ id integer [primary key] title varchar form varchar isbn varchar summary varchar detail longtext author varchar pages integer contents longtext price integer pub_date date}도서 등록 api가 없기 때문에 > DB에 insert 작업 해주어야 한다.작성한 sql 문은 vscode에 `data.sql` 파일 안에서 관리해주는 것이 좋다. 전체 도서 조회전체도서 목록에서는 도서의 상세정보를 요청하고, 필요한 데이터만 선별하여 프론트에서 구현하기.`통으로 정보 보내줌`+ 추후에 한번..
mariadb.js 로 코드와 db 연동//mysql 모듈 소환const mariadb = require("mysql2");//DB와 연결 통로 생성const connection = mariadb.createConnection({ hose: "localhost", user: "root", password: "rood", database: "Bookshop", dataStrings: true,});module.exports = connection; users.js 회원가입 api//회원가입router.post("/join", (req, res) => { const {email, password} = req.body; let sql = 'INSERT INTO users (email, passwo..