Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발공부일지

Database - Database connection 본문

DataBase

Database - Database connection

보람- 2023. 9. 20. 18:05

목차

1. database 만들기

2. connection 해보기

3.connection pool

4. mysql2/promise 사용하기


 

 

 

1. database 만들기

sudo service mysql restart
sudo mysql -u[유저네임] -p
# 비밀번호 입력하기
create database block10;
use block10;

CREATE TABLE boards(
    id INT AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL,
    content TEXT,
    writer VARCHAR(20) NOT NULL,
    created_at DATETIME DEFAULT NOW(),
    hit INT DEFAULT 0,
    PRIMARY KEY(id)
);

show tables;
desc boards;

SHOW STATUS LIKE 'Threads_connected';
mysql> SHOW STATUS LIKE 'Threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 3     |
+-------------------+-------+

 

 

 

2. connection 해보기

- connection.js 파일을 만들어서 작업해보기

const mysql = require("mysql2");
const connection = mysql.createConnection({
    host: "127.0.0.1",
    port: "3306",
    user: "boram",
    password: "-----",
    database: "block10",
});

// console.log(connection);
connection.connect((error) => {
    if (error) {
        console.log("error");
        return;
    }
    console.log("Connected to MYSQL");

    const sql =
        'insert into boards(title,content, writer) values("ttt", "ddd", "guniee");';
    connection.query(sql, (error, result) => {
        if (error) {
            console.log("Error query", error);
            return;
        }
        console.log(result);
    });

    connection.end((error) => {
        if (error) {
            console.log("ERROR");
            return;
        }
        console.log(`MYSQL Connection Closed`);
    });
});
mysql> select * from boards;
+----+-------+-----------+--------+---------------------+------+
| id | title | content   | writer | created_at          | hit  |
+----+-------+-----------+--------+---------------------+------+
|  1 | title | coneetofe | boram  | 2023-09-20 10:51:19 |    0 |
|  2 | ttt   | ddd       | guniee | 2023-09-20 11:00:22 |    0 |
+----+-------+-----------+--------+---------------------+------+

- 서버는 항상 켜져있어야 하는데 위의 코드는 실행이되고나서 프로세스가 종료된다.

- 그래서 미리 커넥션을 맺어두고 하나씩 꺼내 쓰고 반환하는 connection pool을 이용한다!

 

 

 

 

3.connection pool

const mysql = require("mysql2");
const pool = mysql.createPool({
    host: "127.0.0.1",
    port: "3306",
    user: "boram",
    password: "--------",
    database: "block10",
});

// console.log(pool);

pool.getConnection((error, connection) => {
    if (error) {
        console.log(`error : ${error}`);
        return;
    }
    console.log(`Connection to MYSQL`);

    const sql = "select * from boards;";
    connection.query(sql, (error, result) => {
        connection.release();

        if (error) return;

        console.log(result);
    });
});

// console.log(result);
[
  {
    id: 1,
    title: 'title',
    content: 'coneetofe',
    writer: 'boram',
    created_at: 2023-09-20T01:51:19.000Z,
    hit: 0
  },
  {
    id: 2,
    title: 'ttt',
    content: 'ddd',
    writer: 'guniee',
    created_at: 2023-09-20T02:00:22.000Z,
    hit: 0
  }
]

- entity를 만들어서 repository에 findAll() 했을때 data 라는 배열에 들어가는 내용과 같다!!

- 그런데 밖에서 result를 찍어볼수없기때문에 비동기로 작업해주어야한다!

 

 

 

 

 

4. mysql2/promise 사용하기

const mysql = require("mysql2/promise");
const pool = mysql.createPool({
    host: "127.0.0.1",
    port: "3306",
    user: "boram",
    password: "--------",
    database: "block10",
});

// console.log(pool);

(async () => {
    try {
        const [result, field] = await pool.query("select * from boards;");
        console.log(result);
        // [[result], [field]]
    } catch (e) {
        throw new Error("err!!!!!");
    }
})();
[
  [
    {
      id: 1,
      title: 'title',
      content: 'coneetofe',
      writer: 'boram',
      created_at: 2023-09-20T01:51:19.000Z,
      hit: 0
    },
    {
      id: 2,
      title: 'ttt',
      content: 'ddd',
      writer: 'guniee',
      created_at: 2023-09-20T02:00:22.000Z,
      hit: 0
    }
  ],
  [
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `title` VARCHAR(200) NOT NULL,
    `content` TEXT,
    `writer` VARCHAR(20) NOT NULL,
    `created_at` DATETIME(19),
    `hit` INT
  ]
]

-  [[result], [field]] 이 나오게된다!!

- result값이 이중배열안에 들어와서 구조분해할당으로 [] result만 꺼내온다!

- 그리고 promise 사용하니까 try, catch문을 써서 예외처리를 해주어야한다!!

 


※ 예외처리하는것 잊지않기!

 

'DataBase' 카테고리의 다른 글

Database - sql 계정 생성, mysql2 설치, net-tools설치  (0) 2023.09.20
Database - SQL, DDL, DML  (0) 2023.09.19
Database - MySQL , DBMS, RDBMS  (0) 2023.09.18