1.mysql 명령문 총 정리
CREATE DATABASE testMysql;
SHOW DATABASES;
DROP DATABASE testMysql;
USE testMysql;
SHOW TABLES;
CREATE TABLE store(id INT AUTO_INCREMENT PRIMARY KEY,tel VARCHAR(20));
CREATE TABLE store2(id INT AUTO_INCREMENT PRIMARY KEY,tel VARCHAR(20));
DESC store;
CREATE TABLE user(user_id VARCHAR(20) PRIMARY KEY,user_pw VARCHAR(20) NOT NULL,user_name VARCHAR(20) NOT NULL,
gender CHAR(4) DEFAULT '남자',
date DATETIME DEFAULT now());
DESC user;
INSERT INTO user(user_id,user_pw,user_name,gender) VALUES('asd1','dsa','mumu','남자');
SELECT * FROM user;
INSERT INTO user(user_pw,user_name) VALUES('123','zero');
SELECT * FROM user WHERE user_id='asd1';
SELECT * FROM user WHERE gender='남자';
UPDATE user SET gender='여자' WHERE user_id='asd1';
UPDATE user SET user_pw='000',user_name='none',gender='남자' WHERE user_id='asd1';
DELETE FROM user WHERE user_id='asd1';
CREATE TABLE board (id INT(11) AUTO_INCREMENT PRIMARY KEY ,content TEXT,writer VARCHAR(40) NOT NULL,likes INT(11) DEFAULT 0);
SELECT * FROM board;
INSERT INTO board (content,writer) VALUES('안녕','난 작성자');
INSERT INTO board (content,writer) VALUES('첫 글ㅋㅋㅋ ','운영자');
INSERT INTO board (content,writer) VALUES('닉 언 벤입니다.','반장');
INSERT INTO board (content,writer) VALUES('근데이제뭐함?','소신발언');
INSERT INTO board (content,writer) VALUES('난 한마리의 야생동물','경주마');
INSERT INTO board (content,writer) VALUES('트위터 차기 ceo는 시바견입니다.','일론머스크');
ALTER TABLE user2 MODIFY newcal CHAR(20);
ALTER TABLE user2 CHANGE user_pw newcal VARCHAR(20);
ALTER TABLE user RENAME user2;
DESC user2;
CREATE Table user(
id INt AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20));
CREATE Table post(
id INt AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(20));
ALTER Table post ADD COLUMN userId INT;
DESC post;
ALTER Table post ADD CONSTRAINT fk_user FOREIGN KEY (userId) REFERENCES user (id);
INSERT INTO user (name) VALUES('asdasd');
INSERT INTO post (title,userId) VALUES('3333',3);
SELECT * FROM user INNER JOIN post ON user.id=post.userId WHERE user.id=1;
SELECT user.id,post.title FROM user INNER JOIN post ON user.id=post.userId WHERE user.id=1;
- vsc의 확장 프로그램 mysql을 사용하였다(의문의 중국 코딩 장인)
2.기존 토이프로젝트에 적용
- models
getAllboardUser: async (userId) => {
try {
const sql =
"SELECT board.id,board.title,board.content,board.like,board.likeId,board.img FROM board INNER JOIN users ON users.id=board.foreUserId WHERE users.id=?";
const [boardList] = await mysql.query(sql, [userId]);
return boardList;
} catch (error) {
console.log("getAllboardUser in model board", error);
}
},
- board의 foreUserId는 user의 id를 외래키로 설정하였다.
- foreUserId와user의 id가 일치할 때 두 테이블을 합친다.
- 그 후에 user.id를 변수로 지정하여 로그인한 회원의 게시글만을 가져올 수 있다.
- controllers
GetAllBaordsUser: async (req, res) => {
try {
const nowLogin = await controllUsers.GetNowLogin(req, res);
const dataList = await boardFun.getAllboardUser(nowLogin);
return dataList;
} catch (error) {
console.log("GetAllBaordsUser in board controller", error);
}
},
- router
const e = require("express");
const mypageRouter = e.Router();
const { controlBoards } = require("../controllers/board");
mypageRouter.get("/", async (req, res) => {
const data = await controlBoards.GetAllBaordsUser(req, res);
console.log(data);
res.render("mypage", { data: data });
});
module.exports = {mypageRouter};
- ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="/board.css" />
</head>
<body>
<h1>mypage</h1>
<div class="table">
<ul class="table-head">
<li>번호</li>
<li>제목</li>
<li>내용</li>
<li>글쓴이</li>
<li>삭제</li>
<li>수정</li>
</ul>
<% data.forEach((el,index)=>{ %>
<ul class="table-row">
<li><%= el.id %></li>
<li>
<a
href="/board/view/<%= el.id %>"
style="text-decoration: none; color: black"
><%= el.title%></a
>
</li>
<li><%= el.content%></li>
<li><%= el.nickName%></li>
<li>
<a
href="/board/delete/<%= el.id %>"
style="text-decoration: none; color: black"
>삭제</a
>
</li>
<li>
<a
href="/board/edit/<%= el.id %>"
style="text-decoration: none; color: black"
>수정</a
>
</li>
</ul>
<hr style="width: 99%; border: 1px solid #146C94" />
<%}) %>
</div>
</body>
</html>
3.느낀점
💡 mysql에서 드디어 join을 배웠다. 항상 관계형 데이터베이스에서 두 테이블의 상관관계를 생각하고 효율적으로 join하는 방법을 고민해야한다.
앞으로 있을 프로젝트에서 데이터베이스 설계를 위해서 sql구문을 잘 숙지할 필요가있다.
외래키를 선언하고 게시글이나 여러 종속관계를 다시 숙지 할 수 있는 날이었다.
잘 읽었습니다. 좋은 정보 감사드립니다.