MySQL result객체 활용, bulk insert

HARIBO·2021년 11월 16일
0

result 객체를 활용하기, 한 번에 여러 레코드를 넣기

  • query 함수의 콜백 함수 인수인 result의 insertId 속성에는 행의 id값이 담겨 있다(단, 여러 개의 행이 추가될 경우에도 insertId속성은 하나이다. 아래 코드의 result객체 값 보기)
  • 1:N관계 테이블, Join테이블에 데이터를 추가할 때 활용 가능할 것 같다.
  • 여러 개의 레코드를 넣으로면, 쿼리문에 '?'를 추가하고, 배열을 만들어 query함수의 인자로 전달한다. (result를 보면 3개의 열에 영향을 준 것을 볼 수 있다.(affectedRows))
  • posts테이블과 comments테이블은 1:N 관계이다.
let con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: process.env.PASSWORD,
  database: "test_schema"
});

con.connect(function(err) {
  if (err) throw err;
  let insertPosts = "INSERT INTO posts (title, user_name) VALUES ('제목1', '홍길동')";
  //query는 비동기 함수이기 때문에 콜백 함수의 내부에서 쿼리문을 작성한다.
  con.query(insertPosts, function (err, result) {
    if (err) throw err;
    let postId = result.insertId
    let params = [
        [postId, "댓글1"],
        [postId, "댓글2"],
        [postId, "댓글3"],
    ];
    
    //post_id는 posts테이블의 id PK를 참조하는 FK
    let insertComments = `INSERT INTO comments (post_id, contents) VALUES ?`;
    con.query(insertComments, [params], function (err, result) {
        console.log(result)
              /*
        OkPacket {
            fieldCount: 0,
            affectedRows: 3,
            insertId: 1,
            serverStatus: 2,
            warningCount: 0,
            message: '&Records: 3  Duplicates: 0  Warnings: 0',
            protocol41: true,
            changedRows: 0
          }
          */
      
    })
    
  });
});

결과

posts 테이블

comments 테이블

출처
https://www.w3schools.com/nodejs/nodejs_mysql_insert.asp

0개의 댓글