오늘은 공부 중/DB

[mysql + node.js] now()를 쓰고 싶을 때, 특정 배열값을 sql로 넣어야 할 때 다중 insert 하는 법

이도토리 2021. 9. 6. 01:16

1. Node.js에서 now()를 쓰고 싶을 때

https://stackoverflow.com/questions/47903115/mysql-timestamp-now-is-not-working-with-nodejs

mysql timestamp now() is not working with nodejs

I am trying to insert a row into mysql table using nodejs. I am trying to update a column creation_date(timestamp) by sending its value as now() in nodejs, but it is giving an error saying that "no...

stackoverflow.com

구글이 갈수록 내 맞춤형 결과만 척척 내줘서 점점 구글링 스킬이 늘어가는 기분이 든다.

배열로 값을 보내주어야 하는 상황에서
now()를 적으면 undefined라고 에러가 나서

''로 감싸면 날짜 데이터가 아예 날아가지를 않았다.

stackoverflow의 조언대로 2가지 방법이 있는데

1. 보낼 때 new Date()로 선언해서 보내주기 ( 쿼리문 속 mysql 방식이 아니라 node의 날짜 데이터로)

2. DATABASE 자체에서 TIMESTAMP 자료형을 적고, default값을 CURRENT_TIMESTAMP로 줘서 DB 안에서

자체적으로 기본 값으로 넣어버리기

개인적으로는 2번 방법이 더 편안해보이긴 하는데 저건 앞으로도 써볼 기회가 많을 거 같아서 1번 방식으로 구현해보았다.

2. now를 쓸 수 없었던 이유 ! 배열값을 넣어줘야 할 때

https://velog.io/@devohda/mysql-%EB%B0%B0%EC%97%B4-insert

mysql 배열 insert

다중 insert

velog.io

mysql 배열로 이루어진 data 한꺼번에 insert 하는 법

const arr = [[elem1, elem2], [elem1, elem2], [elem1, elem2]]; const query = `INSERT INTO 테이블이름 (row 이름, row 이름) VALUES ?` const result = await conn.query(query, [arr]);


중요한 사실
다중 insert 할 데이터를 한 번 더 배열로 감싸주어야 한다.
데이터가 들어가야 할 자리에 ? 를 쓴다.



나의 경우 보내야 할 배열 값이 워낙 많아서
for in 반복문으로 새로운 형태의 배열에 담아 보내주었다.


정말 바보같은 실수를 할 뻔 했다.
insert 과정에서 배열로 쭉쭉 넘어가면 될 것을

하나 보낼 때마다 db 연결을 다시 하고 끊는 식으로
코드를 짤 뻔했다.

아찔하다,, 하지만 그걸 캐치하고 바꿔내서
정말정말 다행이기도 하다. 오늘도 수고했어 도톨아