위코드 3주차 백엔드 세션 MySQL & SQL 과제 중 아래 테이블을 보고 직접 MySQL 쿼리문을 활용하여 아래처럼 똑같이 만들어야 했다.
mysql> SELECT * FROM users;
+----+-----------+---------------------------+---------------------------------------------------------+------------+---------------------+------------+
| id | name | email | profile_image | password | created_at | updated_at |
+----+-----------+---------------------------+---------------------------------------------------------+------------+---------------------+------------+
| 1 | Rebekah | Glover12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password | 2022-07-16 14:15:21 | NULL |
| 2 | Fabian | O'Connell12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password1 | 2022-07-16 14:15:21 | NULL |
| 3 | Elenor | Skiles12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password2 | 2022-07-16 14:15:21 | NULL |
| 4 | Madge | Quitzon12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password3 | 2022-07-16 14:15:21 | NULL |
| 5 | Zelma | Kozey12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password4 | 2022-07-16 14:15:21 | NULL |
| 6 | Destiney | Homenick12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password | 2022-07-16 14:15:21 | NULL |
| 7 | Buck | Spencer12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password5 | 2022-07-16 14:15:21 | NULL |
| 8 | Pete | Smitham12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password6 | 2022-07-16 14:15:21 | NULL |
| 9 | Lydia | Harris12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password7 | 2022-07-16 14:15:21 | NULL |
| 10 | Danika | Gulgowski12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password8 | 2022-07-16 14:15:21 | NULL |
| 11 | Eulah | Murray12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password9 | 2022-07-16 14:15:21 | NULL |
| 12 | Beatrice | Nienow12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password10 | 2022-07-16 14:15:21 | NULL |
| 13 | Margarete | Krajcik12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password11 | 2022-07-16 14:15:21 | NULL |
| 14 | Nikita | Kemmer12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password12 | 2022-07-16 14:15:21 | NULL |
| 15 | Arnulfo | Bednar12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password13 | 2022-07-16 14:15:21 | NULL |
| 16 | Richie | Koss12345@email.com | https://github.com/amacneil/dbmate#command-line-options | passwrod14 | 2022-07-16 14:15:21 | NULL |
| 17 | River | Wolf12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password15 | 2022-07-16 14:15:21 | NULL |
| 18 | Velma | Weber12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password16 | 2022-07-16 14:15:21 | NULL |
| 19 | Niko | Ayo12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password17 | 2022-07-16 14:15:21 | NULL |
| 20 | Fermin | Wintheiser12345@email.com | https://github.com/amacneil/dbmate#command-line-options | password18 | 2022-07-16 14:15:21 | NULL |
+----+-----------+---------------------------+---------------------------------------------------------+------------+---------------------+------------+
mysql> SELECT * FROM posts;
+----+-------------------------+-----------------------------------------------------+---------+---------------------+---------------------+
| id | title | content | user_id | created_at | updated_at |
+----+-------------------------+-----------------------------------------------------+---------+---------------------+---------------------+
| 1 | 위코드 1일차 | HTML과 CSS 익숙해지기.. | 1 | 2022-04-10 11:41:36 | 2022-04-23 11:21:44 |
| 2 | 위코드 2일차 | Javascript 기본 문법 학습.. | 1 | 2022-04-18 11:41:36 | 2022-04-23 11:21:54 |
| 3 | 위코드 3일차 | 웹서비스의 역사와 발전 세션을 듣고.. | 1 | 2022-05-02 11:41:36 | 2022-04-23 11:22:01 |
| 5 | 자료구조 1번 | BigO Notation이란 무엇인가? | 2 | 2022-04-19 11:41:36 | 2022-04-23 11:22:13 |
| 6 | 자료구조 2번 | 시간 복잡도와 공간 복잡도에 대해서.. | 2 | 2022-04-22 14:12:45 | NULL |
| 7 | 프론트 개발 입문 | 프론트 입문 HTML이란 무엇인가? | 3 | 2022-04-23 11:43:25 | 2022-04-23 11:56:25 |
+----+-------------------------+-----------------------------------------------------+---------+---------------------+---------------------+
-- likes 중간 테이블을 통해서 누가 어떤 게시물을 좋아요하고 있는지 알 수 있습니다.
mysql> SELECT * FROM likes;
+----+---------+---------+---------------------+
| id | user_id | post_id | created_at |
+----+---------+---------+---------------------+
| 1 | 1 | 3 | 2022-07-16 14:18:26 |
| 2 | 2 | 3 | 2022-07-16 14:18:26 |
| 3 | 3 | 3 | 2022-07-16 14:18:26 |
| 4 | 4 | 3 | 2022-07-16 14:18:26 |
| 5 | 5 | 3 | 2022-07-16 14:18:47 |
| 6 | 6 | 1 | 2022-07-16 14:18:47 |
| 7 | 7 | 2 | 2022-07-16 14:18:47 |
| 8 | 8 | 3 | 2022-07-16 14:18:47 |
| 9 | 9 | 5 | 2022-07-16 14:19:13 |
| 10 | 10 | 2 | 2022-07-16 14:19:13 |
| 11 | 11 | 5 | 2022-07-16 14:19:13 |
| 12 | 1 | 5 | 2022-07-16 14:18:26 |
| 13 | 1 | 7 | 2022-07-16 14:18:26 |
+----+---------+---------+---------------------+
mysql> SELECT * FROM comments;
+----+--------------------------------+---------+---------+---------------------+------------+
| id | content | user_id | post_id | created_at | updated_at |
+----+--------------------------------+---------+---------+---------------------+------------+
| 1 | 저는 내용이 정말 어렵게 느껴지더라구요! | 11 | 1 | 2022-07-16 14:20:10 | NULL |
| 2 | HTML, CSS 학습하시는 여러분 화이팅! | 12 | 1 | 2022-07-16 14:20:10 | NULL |
| 3 | .... | 13 | 1 | 2022-07-16 14:20:10 | NULL |
| 4 | 자료구조 시작!! | 1 | 5 | 2022-07-16 14:20:10 | NULL |
| 5 | 저도 시작했습니다!! | 2 | 5 | 2022-07-16 14:20:10 | NULL |
| 6 | 자료구조 학습 같이 하실분 계신가요? | 3 | 5 | 2022-07-16 14:20:10 | NULL |
+----+---------------------------------+---------+---------+---------------------+------------+
테이블은 4개니까 쿼리문으로 후딱 만들고.. 이제 데이터를 넣어야하는데..
아니 이걸 언제 다 쿼리문에 데이터를 하나씩 대입해서 타이핑해서 넣으라고?
INSERT INTO users (name, email, password, profile_image) VALUES ('Rebekah', 'Glover12345@email.com', 'https://github.com/amacneil/dbmate#command-line-options', 'password')
이런 의미없는 노가다를 위코드에서 시켰을리 없다!
라고 생각하며 떠오른게 Node.js fileSystem 모듈이다.
위 데이터를 하나하나 직접 치지 않고 코드로 작성해 쿼리문을 콘솔로 찍어 활용하는 방법을 소개하겠따.
테이블 마다 내용을 복붙해서 .txt 파일을 만들어준다.
예를 들어 users 데이터의 txt 파일이면 필요없는 위에 첫 3 row(테이블 column에 해당하는 내용, 위아 래 칸을 나눈 보더)를 날려주고 usersdata.txt로 저장했다.
onst fileSystem = require('fs');
const { isArrayBuffer } = require('util/types'); //<--질문 필요
const userData = fileSystem.readFileSync("./userdata.txt", "utf-8");
const array = userData.split('| ')
for (let i = 2 ; i < array.length; i = i + 7)
console.log(`insert into users (name, email, profile_image, password) values ("${array[i].trim()}", "${array[i+1].trim()}", "${array[4].trim()}", "${array[i+3].trim()}");`);
Step2에서 작성한 코드를 run하면 위 사진 처럼 뜨는데 MySQL에서 복붙해서 넣으면 끝!!
INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2),
...
(value_list_n);
console.log 찍을 쿼리문을 위와 같은 형식으로 작성해주면 한줄에 multiple rows 를 넣을 수 있는데 다 하고 나서 알았따! 필요하신분은 위 쿼리문처럼 수정해서 사용해서 써도 될듯!
코드 짰던 시간이나 직접 쿼리문을 타이핑해서 데이터를 넣는 시간이나 비슷했을거 같긴 한데...
뭐 배운걸 복습했다는 너낌으로 마무리