mysql 라이브러리의 'JSON반환객체'에 대해서 알아보자

Songss·2024년 12월 18일

DBMS

목록 보기
17/20

sql = `INSERT INTO orderedBook (order_id, book_id, quantity) VALUES ?`;

  values = [];

  items.forEach((item) => {
    values.push([order_id, item.book_id, item.quantity]);
    console.log(values);
  });

conn.query(sql, [values], (err, results) => {
    if (err) {
      console.error(err);
      return res.status(StatusCodes.BAD_GATEWAY).json({ error: '데이터베이스 오류입니다.' });
    }

    return res.status(StatusCodes.OK).json(results);
  });

위 코드는 mysql라이브러리 문법이고, Error 없이 실행하게 된다면
JSON형으로 results가 반환되는데 , 그 반환되는 값이 맨 위 사진에 보듯 결과가 반환된다.

이때 7가지의 반환데이터들에 대해서 알아보자.


1. fieldCount: 0

  • 의미: 쿼리 결과에서 반환된 필드(컬럼)의 수입니다.
    • SELECT 쿼리를 실행할 때 반환된 컬럼 수를 나타냅니다.
    • 하지만 INSERT, UPDATE, DELETE 쿼리에서는 컬럼을 반환하지 않으므로 항상 *0입니다.

2. affectedRows: 1

  • 의미: 쿼리 실행으로 영향을 받은 행(row)의 개수를 나타냅니다.
    • INSERT: 새로 삽입된 행의 수.
    • UPDATE: 수정된 행의 수.
    • DELETE: 삭제된 행의 수.
    • 여기서는 1개의 행이 성공적으로 추가되었음을 의미합니다.

3. insertId: 5

  • 의미: 새로 삽입된 행의 Primary Key ID 값을 나타냅니다.
    • 테이블의 AUTO_INCREMENT 필드에 의해 자동으로 생성된 ID 값입니다.
    • 만약 테이블에 AUTO_INCREMENT 필드가 없다면, *0이 반환됩니다.
    • 예를 들어, INSERT INTO users (name) VALUES ('John')를 실행했다면, 추가된 레코드의 ID를 반환합니다.

4. info: ""

  • 의미: 쿼리 실행과 관련된 추가 정보를 제공합니다.
    • 주로 경고, 수정된 값 등의 정보를 텍스트 형태로 나타냅니다.
    • INSERT, UPDATE 쿼리의 경우 영향을 받은 행 수나 추가 정보를 포함할 수 있지만, 일반적으로 비어있습니다.
    • 예: Records: 1 Duplicates: 0 Warnings: 0 등의 값이 반환될 수 있습니다.

5. serverStatus: 2

  • 의미: 쿼리 실행 후 MySQL 서버의 상태를 나타냅니다.
    • 2는 MySQL 서버가 여전히 활성 상태임을 의미합니다.
    • 상태 값은 MySQL 내부 동작 상태를 나타내므로 일반적인 개발 과정에서는 신경 쓰지 않아도 됩니다.

6. warningStatus: 0

  • 의미: 쿼리 실행 중 발생한 경고(warnings) 개수를 나타냅니다.
    • 0: 경고가 발생하지 않았음을 의미.
    • 예를 들어, 중복 키가 있는 데이터 삽입 시 경고가 발생할 수 있으며, 그 경우 1 이상의 값을 가집니다.

7. changedRows: 0

  • 의미: 쿼리 실행 중 실제로 변경된 행(row)의 수를 나타냅니다.
    • UPDATE 쿼리에서만 의미가 있으며, 기존 값과 새로운 값이 같을 경우 이 값은 0이 될 수 있습니다.
    • INSERT, DELETE 쿼리에서는 항상 0입니다.

전체 정리

{
  "fieldCount": 0,        // 반환된 컬럼 수 (INSERT 쿼리이므로 0)
  "affectedRows": 1,      // 영향을 받은 행의 개수 (삽입된 행 1개)
  "insertId": 5,          // 새로 삽입된 행의 AUTO_INCREMENT ID
  "info": "",             // 추가 정보 (현재는 비어 있음)
  "serverStatus": 2,      // MySQL 서버 상태 (활성 상태)
  "warningStatus": 0,     // 경고 개수 (없음)
  "changedRows": 0        // 실제 변경된 행의 개수 (INSERT이므로 0)
}

이 정보는 주로 데이터베이스와 상호작용하면서 쿼리가 제대로 실행되었는지 확인하거나 디버깅하는 데 유용합니다.

0개의 댓글