개발공부일지
Database - Database connection 본문
목차
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 |