티스토리 뷰

역시 비교봇/등록봇 코드를 보다 보니, 쿼리문 생성 시 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
반응형
Comments
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
250x250