본문 바로가기
  • 포르쉐타고싶다
인포테인먼트 - development/sql

[MySQL] INSERT할 때 배열을 INSERT하는 방법

by 지오ㄴl 2020. 5. 4.

1. 배경

 

쿼리문을 짜다보면

개수가 정해지지 않은 배열을 INSERT해야 할 일이 생긴다.

만약 개수가 정해진 배열이면 

INSERT INTO [TABLE] (COLUMN1, COLUMN2) 
VALUES
(VALUE11, VALUE21),
(VALUE12, VALUE22),
(VALUE13, VALUE23)

이렇게 나열해서 insert할 수 있다.

 

하지만 개수가 정해지지 않은 객체배열은 어떻게 INSERT해야할까

 

서버에서 INSERT CONNECTION 쿼리문에 for문을 돌려서 '조진다'?

LOOP PROCEDURE을 사용해야 할까?

 


 

2. 개념

 

방법은 쉬웠다.

 

1) 위에서 VALUES 뒤에 괄호를 넣어주지 않고
2) ?를 넣은 쿼리문을 connection_query에 넣어주고
3) ?에 대한 값으로
이중대괄호배열을 넣어주면 된다.

 


 

3. 사용방법

 

예시를 보겠다.

 

일단 DB connection함수를 다음과 같이 설정했다고 하자

queryParam_Parse: async (inputquery, inputvalue) => {
    const query = inputquery;
    const value = inputvalue;
    let result;
    try {
      var connection = await pool.getConnection();
      result = (await connection.query(query, value)) || null;
    } catch (err) {
      console.log(err);
      connection.rollback(() => {});
      next(err);
    } finally {
      pool.releaseConnection(connection)
      return result;
      
    }
  }

 

위의 함수의 두 인자에 각각

변수에 들어갈 자리에 ?가 들어간 쿼리문과

?에 들어갈 변수르 넣어주는 함수이다.

 

상황예시로,

페이스북 게시글을 등록하는 상황을 보자.

글과 사진을 넣을 때, 사진의 개수는 유저의 맘이다.

 

먼저 기본적인 INSERT문을 사용해보면

 

insertFunction: async() => {
	try{
    	
    	const query = 'INSERT INTO TEST_TABLE (COLUMN1) VALUES (?)';
        const value = 'VALUE1';
    
        const result = await queryParam_Parse( query, [value] );
        
        return result;
    
    }catch(err) {
    throw new Error(err)
}

 

query를 보면

const query = 'INSERT INTO TEST_TABLE (COLUMN1) VALUES (?)';

 

위와 같이 일반적인 쿼리문은 VALUES 값으로 '(?)'로 설정되어 있고

queryParam_Parse( query, [value] )

 

이렇게 inputValue값으로 대괄호 []안에 값을 넣어준다.

 

이제 배열을 INSERT하는 방법을 볼까

 

상황예시로,

페이스북 게시글을 등록하는 상황을 보자.

글과 사진을 넣을 때, 사진의 개수는 유저의 맘이다.

 

그러면 그러면 여러 ([게시물_idx], [이미지 url]) 를 INSERT 하게 되는데 

const query = 'INSERT INTO BOARD_IMG (BOARD, IMAGE_URL) 
VALUES 
(?, ?), 
(?, ?), 
.
.
. ';

 

저렇게 VALUES 개수를 쿼리문에서 함부로 정할 수 없다.

 

대신

 

위의 (?, ?), (?, ?), .. 의 나열 대신 ? 하나만 넣고

그 ?의 value 값으로 배열의 이중배열을 넣는 것이다.

 

insertFunction: async() => {
	try{
    	
    	const query = 'INSERT INTO TEST_TABLE (BOARD_IDX, BOARD_IMG_URL) VALUES ?';
        const value = 
        [
        	[board1, board_img_1],
            [board1, board_img_2],
            [board1, board_img_3]
        ];
    
        const result = await queryParam_Parse( query, value );
        
        return result;
    
    }catch(err) {
    throw new Error(err)
}

 

반응형

댓글