workbench
docker로 mariadb를 사용하기 때문에, docker 는 켜놔야한다.
비밀번호는 root 로 생성하고, 기존에 내 pc 에 있던 sql80을 열었다.
youtube DB 생성
id는 1234~
이메일 로 유일성 만족
Zero Fill : 소괄호 숫자 안의 수가 정수소수 byte 옵션인지, 자릿수인지 등
0으로 기존으로 채우고 싶다면 default에 0으로
gui로도 외래키 컬럼을 생성한 다음에, user_id 외래키 설정을 해줘야한다.
id 순서 auto로 만든다면, 사람이 하면 순서가 꼬이거나 빈공간이 생길 가능성이 있기 때문에 건들지 않는다!
대신 auto는 실패한 것들도 연산으로 ++ 해준다!
DB와 연동하기 npm
mysql2 npm 모듈
// Get the client
const mysql = require("mysql2");
// Create the connection to database
const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "Youtube",
});
// Simple query
connection.query("SELECT * FROM `users`", function (err, results, fields) {
console.log(results);
console.log(fields);
});
results 각 행
fields 컬럼정보
각각의 데이터를 가져오려면? 배열 + 비구조화 할당으로 가져온다.
connection.query("SELECT * FROM `users`", function (err, results, fields) {
var {id, name, email, created_at} = results[0];
console.log(id);
console.log(name);
console.log(email);
console.log(created_at);
});
time_zone 통일된 시간설정
workbench에서 set time_zone 설정을 한다.
`global` 제외한 `set time_zone = ` 도 설정을 한번더
총 두번! 해줘야지 바로 적용이 된다.
nodeJS 에서는 바로 적용되지 않는걸 볼 수 있다.
const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "Youtube",
dateStrings: true,
});
- DB에서 저장된 시간은 같은데, 표시되는 형식만 다를뿐 세팅한 시간대에 맞게 뿌려주는 방식이었다.
- vscode에서도 날것의 형태로 불러옴. String 형태가 아니었던것!
- DB에서 Asia/Seoul로 설정해서 우리의 시간대를 설정해주었다면 `set time_zone = 'Asia/Seoul'`
- mysql과 연결하는 설정에다가 date를 받아올때, 날것의 형태가 아닌, `dateString: true` 로 설정해주었더니
- 별도의 데이터 가공 없이도 DB의 날짜를 바로 받아올 수 있다.
이렇게 해도 안된다면, node.js 딴의 time_time을 찍어보고 설정을 해주어야 한다.
☑️ 배운 점
workbench 사용법! 학교수업때 CLI 따라치면서 자괴감과 멘붕을 느낀게 한두번이 아니었는데…. GUI 사용이 정말 편하고 직관적이다! 오늘 감격하면서 강의를 보았다… CLI의 오타를 해결할 수 있는 방법이어서 너무 좋았다.
id를 auto로 만든다면, 순서가 꼬이거나 빈공간이 생길 가능성이 있으니, 컴퓨터가 작업하도록 맡긴다는것. → 회원탈퇴나 게시글 삭제 같은 경우도 마찬가지로 빈공간이 발생한다. 이때 빈공간을 인지하고 새로 할당하는 방법이 있을까?
time_zone 설정할때 작업 순서를 이해할 수 있어서 좋았다.
개인적으로 코드와 db 연결은 진짜 어려운 줄 알았다.. 겁먹지 말고! 하나하나 도전해보자!