티스토리 뷰
역시 비교봇/등록봇 코드를 보다 보니, 쿼리문 생성 시 placeholder를 활용하는 곳이 있어 찾아보았다.
결론부터 말하면 이 로직은,
"INSERT 쿼리에 placeholders를 추가하여 최종 SQL 쿼리 생성"
이것이다.
예를 들면 마지막 문장으로
query += placeholders;
placeholders**에서 생성된다수의 SQL 자리 표시자(Placeholders)를
query 문자열에 추가하여 최종적으로 INSERT SQL 쿼리를 완성
이런 형태로 활용하곤 한다.
배경
1. query 초기 상태:
- 코드에서 query는 기본적인 INSERT INTO 쿼리 구문이다.
let query = `INSERT INTO tb_products (` + colArr.join(',') + `) VALUES `;
- 여기서의 쿼리는
INSERT INTO tb_products (shopName, productName, ..., changedFields) VALUES
2. placeholders
- placeholders는 productInfo 배열을 기반으로, 각 상품 데이터에 대해 SQL 자리 표시자(예: (?, ?, ..., ?))를 생성한 문자열이다.
- ex. 상품 2개일 때
placeholders = "(?, ?, ?, ..., ?), (?, ?, ?, ..., ?)";
3. query += placeholders
- query에 placeholders를 추가하여 최종 INSERT SQL 쿼리를 완성한다.
- 이 코드 실행 후 query :
INSERT INTO tb_products (shopName, productName, ..., changedFields) VALUES
(?, ?, ?, ..., ?), (?, ?, ?, ..., ?);
예제
예제 데이터
let productInfo = [
{ productName: 'Product A', productNo: '123', productPrice: 100, ... },
{ productName: 'Product B', productNo: '124', productPrice: 200, ... }
];
코드 작동 흐름
1. query 초기값
INSERT INTO tb_products (shopName, productName, ..., changedFields) VALUES
2. placeholders 생성
- productInfo.map()을 통해 두 개의 상품 데이터에 대해 자리 표시자가 생성된다.
(?, ?, ?, ..., ?), (?, ?, ?, ..., ?)
3. query += placeholders 결과
- query에 placeholders가 추가되어 최종 SQL 쿼리가 완성된다.
INSERT INTO tb_products (shopName, productName, ..., changedFields) VALUES
(?, ?, ?, ..., ?), (?, ?, ?, ..., ?);
의의
- query는 다수의 상품 데이터를 한 번에 삽입할 수 있는 완성된 SQL INSERT 구문이 된다.
- 여러 개의 데이터 삽입을 하나의 쿼리로 처리하여 데이터베이스 연결 비용과 실행 시간을 줄일 수 있다.
* VALUES의 역할
- 한 번의 쿼리로 여러 데이터를 삽입할 수 있도록 지원한다는 것.
728x90
반응형
'[기획] > 실무를 수행하며' 카테고리의 다른 글
구매대행과 위탁판매 (2) (1) | 2025.01.04 |
---|---|
구매대행과 위탁판매 (1) (1) | 2025.01.04 |
등록봇과 비교봇 로직 분석 (0) | 2024.12.31 |
템플릿화 시스템의 구조 (1) | 2024.12.30 |
일반적인 기획자 담당 역할 구분 (0) | 2024.12.30 |
Comments