SQL | MySQL 專案應用篇

閱讀時間約 7 分鐘

好,會寫這一篇其實是因為我在 AWS 部署之前做過的 URL Shortener 專案時發生了問題,原因在於我原本是用 NoSQL 的 MongoDB 來管理資料,但既然要用 AWS 的 RDS 來託管資料勢必得更動原先專案裡的資料庫設定,所以咱就跑去學了 MySQL😐

前言 - MongoDB 版

Ok,要改動資料之前,要先來看看我之前是怎麼用 MongoDB 和它的 ODM Mongoose 來建立管理資料的資料庫的。首先,我們要管理的資料有:

  1. 使用者要轉換的網址。
  2. 轉換後的網址。

在原先的 MongoDB 版本中,我先在 models/url.js 中建立資料的結構,長像這樣:

// 載入 mongoose
const mongoose = require('mongoose')

const Schema = mongoose.Schema

const urlSchema = new Schema({
origin: {
type: String,
required: true
},
transfer: {
type: String
}
})

// 匯出資料型態
module.exports = mongoose.model('URL', urlSchema)

然後在 config/mongoose.js 中進行資料庫連線,像這樣:

// 載入 mongoose
const mongoose = require('mongoose')

// 僅在開發環境使用 dotenv
if(process.env.NODE_ENV !== 'production'){
require('dotenv').config()
}

// 連線到 mongoDB
mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })

// 取得資料庫連線狀態
const db = mongoose.connection
// 連線異常
db.on('error', ()=>{
console.log('mongoDB error!')
})
// 連線成功
db.once('open', ()=>{
console.log('mongoDB connected!')
})

// 匯出連線狀態
module.exports = db

然後這些東西呢,等等到 MySQL 版就通通不需要囉,呵呵!



MySQL 版 - 前置準備

接下來,要來把資料管理改成 MySQL,在那之前要先把需要的東西安裝好。

  1. MySQL 資料庫與 Workbench。在安裝時記得選擇 "Full",那就會連同 Workbench 一同安裝。
  2. 打開 Workbench,咱們來建立資料庫囉!
drop database if exists url_shortener;
create database url_shortener;
use url_shortener;
raw-image
  1. 現在終端機 cd 到專案路徑,安裝 mySQL、Sequelize、和 Sequelize CLI。Sequelize 是 MySQL 的 ORM。Sequelize CLI 是 Sequelize 提供的一系列事先設定好的腳本,可以非常快速地幫我們進行資料庫設定。
npm install mysql2 sequelize sequelize-cli



MySQL 版 - 設定篇

該裝的都裝完了,來設定吧!

  1. 初始化設定,這裡執行完會發現 Sequelize 非常貼心地把需要的資料夾與設定檔都建完了,包括:config/config.json、models/index.js、migrations、seeders。
npx sequelize init
raw-image
  1. 打開 config/config.json,可以看到 Sequelize 把資料庫連線的相關設定都寫好了,我們不用像寫 Mongoose 一樣自己從頭寫設定啦!進去後找到 development 環境,在 password 與 database 輸入自己的密碼以及要連線的資料庫名稱。如果有 operatorsAliases 設定記得刪掉。最後會看起來像這樣:
raw-image
  1. 設定 model。這裡一樣會用 Sequelize CLI 來幫忙建立 model。建立完會發現多出 models/url.js 和 migrations/XXX-create-url.js 兩個檔案。
npx sequelize model:generate --name Url --attributes origin:string,transfer:string
  1. 打開那個 migrations/XXX-create-url.js,來把必填的項目加上 allowNull: false,在這裡我設定一定要存入一個原始未轉換的網址。
raw-image
  1. 執行資料庫遷徙。現在就是把我們在專案中寫入的設定通知 MySQL 資料庫來幫忙建立資料囉 ~
npx sequelize db:migrate
  1. 現在回到 Workbench,執行select * from urls;,看到類似下面這張圖就是成功了:
raw-image
  1. 改完資料庫設定,現在必須把原本引用 Mongoose 的 config 和 model 的地方給改掉,以首頁為例:
// 引入資料庫設定
const db = require('../../models')
const Url = db.Url

// 更改原本的操作
router.post('/shortener', async (req, res)=>{
    try{
        const originUrl = req.body.url
        const data = await Url.findOne({where: {origin: originUrl}})
        if(data){
            res.render('shortener', {transfer: data.transfer})
        }else{
            const shorterUrl = urlShortener()
            Url.create({origin: originUrl, transfer: shorterUrl})
            .then(() => res.render('shortener', { transfer: shorterUrl }))
            .catch(error => console.log(error))
        }
    }catch (error){
        console.log(error)
    }
})
  1. 現在咱們測試看看,實際測試一個網址,看到資料庫確實存入使用者輸入的網址以及轉換後的網址啦!嗯,大功告成啦!
raw-image

下篇回到 AWS 部署...www

avatar-img
18會員
37內容數
這個專題用來存放我在學習網頁開發時的心得及知識。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Jeremy Ho的沙龍 的其他內容
LeetCode 518. Coin Challenge II / 動態規劃
LeetCode 518. Coin Challenge II / 動態規劃
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 具備三項工具: 編輯器 終端機 瀏覽器 ※ 步驟一:建立資料夾 mkdir mongodb-demo cd mongodb-demo code . ※ 步驟二:初始化,建立package.json npm init -y ※ 步驟三:安裝網頁伺服器 – Express 因為
Thumbnail
※ Mongoose官網 ※ 認識Mongoose Mongoose 是提供給 Node.js 使用的 MongoDB ODM。透過 Mongoose,我們可以用物件導向語法,以更直覺的方式操作 MongoDB 資料庫。 ※ Mongoose安裝 ※ 建立資料夾: mkdir mo
Thumbnail
MongoDB 是一個靈活的 NoSQL 資料庫,這篇文章將帶你了解如何在 Node.js 中操作MongoDB 資料庫,包括基本連接、CRUD操作,以及如何使用 Mongoose ODM 來簡化資料庫操作。
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
※ 什麼是MongoDB? MongoDB是一個開源、跨平台的非關聯式資料庫,屬於一種文件導向(Document-oriented database)的資料庫管理系統,也就是 NoSQL 數據庫管理系統(DBMS)。 ※ 什麼是非關聯式資料庫(NoSQL)? 非關聯式資料庫(NoSQL)的意思
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 具備三項工具: 編輯器 終端機 瀏覽器 ※ 步驟一:建立資料夾 mkdir mongodb-demo cd mongodb-demo code . ※ 步驟二:初始化,建立package.json npm init -y ※ 步驟三:安裝網頁伺服器 – Express 因為
Thumbnail
※ Mongoose官網 ※ 認識Mongoose Mongoose 是提供給 Node.js 使用的 MongoDB ODM。透過 Mongoose,我們可以用物件導向語法,以更直覺的方式操作 MongoDB 資料庫。 ※ Mongoose安裝 ※ 建立資料夾: mkdir mo
Thumbnail
MongoDB 是一個靈活的 NoSQL 資料庫,這篇文章將帶你了解如何在 Node.js 中操作MongoDB 資料庫,包括基本連接、CRUD操作,以及如何使用 Mongoose ODM 來簡化資料庫操作。
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
本篇文章將教你如何在Kubernetes cluster內部署一個MongoDB,包括取得Manifests、建立Volume、部署實務、基本操作和結論。透過操作演示,讓你瞭解在實務上如何成功建立MongoDB,並進行基本操作。
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
※ MySQL是什麼? MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。  簡單來說,資料
※ 什麼是MongoDB? MongoDB是一個開源、跨平台的非關聯式資料庫,屬於一種文件導向(Document-oriented database)的資料庫管理系統,也就是 NoSQL 數據庫管理系統(DBMS)。 ※ 什麼是非關聯式資料庫(NoSQL)? 非關聯式資料庫(NoSQL)的意思
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為