2024년 9월 13일
Docker 시작 -> mariadb running
MySQL Workbench 시작
Stored Connection : 이미 만들어져 있는 Database 선택 가능
Connection Method : Standard TCP/IP
Hostname : 127.0.0.1 → localhost (데이터베이스 서버에 접근하기 위한 컴퓨터의 주소값_IP), 나 스스로를 가리키는 주소값임
Port : 3306 (데이터베이스 설치할 때 잡았던 넘버)
Username: root
Password : 현업에서 데이터베이스에 접근할 때 미리 설정해 놓기는 함
OK
만들어진 Connection 입장
select : SELECT * FROM posts; + 번개모양 클릭
스키마를 더블클릭하고 쿼리를 요청해야함
Youtube 스키마 더블 클릭 -> Tables 오른쪽 클릭 → Create Table → Name : channels -> 컬럼 만들기
FK 만들기
user_id(INT) + Foreign Keys 탭 → Foreign Key : user_id(조건의 이름) + Referenced Table : ‘Youtube’, ‘users’ → Foreign key details ‘user_id’ : Column → user_id 체크 / Referenced Column → id(users테이블의 id임)
다시 Columns 탭으로 돌아와서 → 마름모 색깔이 달라진 것을 확인 할 수 있음 -> Apply
users 테이블 데이터 삽입
users -> 테이블 번개 모양 이모지 클릭
Result Grid 창 확인 할 수 있음
Result Grid창의 +컬럼 이모지 클릭
id, email, name, password, contact 입력 → Apply
SELECT * FROM Youtube.users; + 번개모양
id 값은 Auto Increment이기 때문에 자동으로 입력됨
channels 테이블 데이터 삽입
user_id는 user의 id를 참조해서 넣어야 에러가 나지 않음
sub_num과 video_count는 defultfmf 0으로 설정해주었기 때문에 아무값도 입력하지 않으면 0이 입력됨
// db.js
// 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);
}
)
서버 재생 <docker 확인 → stop 후 restart 해주기 (너무 오래 켜져 있으면)>
results: users 테이블을 json array 형태로 보여줌 / fileds: 컬럼의 정보 배열로 보여줌
// db.js
// 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) {
const {id, email, name} = results[0];
console.log(id);
console.log(email);
console.log(name);
}
)
users 테이블 오른쪽 연장 아이콘 클릭 → 칼럼 추가 → created_at(TIMESTAMP) + Default/Expression : CURRENT_TIMESTAMP() [NOW 라고 적어도됨] -> Apply
❗️ 참고 : TIMESTAMP() → () 안에 들어가는 내용은 숫자가 들어가는데, 초 뒤에 소수점을 찍어줄 수 있는 몇자리까지 상세히 보여줄까 하는 자릿수를 적음
// db.js
... 생략 ...
connection.query(
'SELECT * FROM `users`',
function(err, results,fields) {
const {id, email, name, created_at} = results[0];
console.log(id);
console.log(email);
console.log(name);
console.log(created_at);
}
)
그런데 시간 셋팅이 다르다는 거을 알 수 있음 -> 9시간 차이
// db.js
... 생략 ...
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
timezone : 'Asia/Seoul',
database: 'Youtube'
});
... 생략 ...
Ignore 되는 것을 볼 수 있다.
그럼 시간을 알맞게 맞춰주려면?
SELECT @@global.time_zone, @@session.time_zone; + 번개모양
session의 time_zone이 SYSTEM인 것을 확인 할 수 있음
session의 timezone 변경
session의 time_zone이 이제 Asia/Seoul인 것을 확인 할 수 있음
SELECT * FROM Youtube.users; + 번개모양
created_at 시간이 바뀐 것을 알 수 있음
그러나 node.js 시간은 바뀌지 않음
node.js에서 시간의 소숫점을 일단 제거해보자
// db.js
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
timezone : 'Asia/Seoul',
database: 'Youtube',
dateStrings: true
});
데이터베이스의 시간 셋팅으로 바뀜
*형식을 바꿨음 → node.js에서는 날 것의 데이터를 보여줬는데, 이 형식을 바꾸니 같아짐
🍎🍏 오늘의 느낀점 : 일단, mysql workbench가 OS에 따라 설치하는 방법이 다르고, 또 맥마다 다른 버전으로 설치해야해서 찾아보는데 조금 시간이 많이 걸렸다. 나중에는 이런 점들을 알았으니, 헤멜일은 없을듯..! 그리고 직접 workbench에서 데이터를 만들어보고 db에 연동시켜서 직접 내 눈으로 보니 신기했다. 나중에는 CLI로 직접 쿼리를 넣고, 데이터들을 관리 해야된다는 생각을 하니 많은 연습이 필요하겠구나 했다. GUI로 봐서 편리하지만 CLI도 빼놓지 않고 쿼리들을 잘 숙지해야겠다.