前端必知必會MySQL的那些事兒(NodeJS全棧成長之路)

前言

博主不是搞技術出身,屬於半路出家(別誤會,不是剃度當和尚),而是以前從事的餐飲服務行業,跟現在完全不沾邊。由於熱愛,喜歡專研技術(說白了就是高大上,重點薪水高,哈哈)。所以到後來有了一個180度的轉變,迷上了搞IT(經常被挨踢)互聯網,雖然過程很痛苦,經歷過網頁設計 - 切圖仔 - 網頁製作(JS特效) - 前後端分離(小程序、H5移動端、PC端) - 最後到全棧工程師(我的奮鬥目標),但收穫的結果你懂的。

在這裏插入圖片描述
前面廢話太多,請勿噴我,由於最近在做一個NodeJS全棧開發的項目,選擇數據庫時正好用到MySQL。於是就把自己如何安裝,配置,命令,工具,建表,部署開發,以及遇到的坑,都一一記錄下來,分享給大家。如能幫到你,就請給個點贊或收藏,謝謝你的鼓勵。如有描述錯誤,歡迎批評指正。

動手之前我們先來普及一下MySQL是什麼,什麼是數據庫,常見數據庫,瞭解一下RDBMS 術語。

  • MySQL是什麼
    MySQL 是最流行的關係型數據庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係數據庫管理系統)應用軟件之一。

  • 什麼是數據庫
    1)數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。
    2)每個數據庫都有一個或多個不同的 API 用於創建,訪問,管理,搜索和複製所保存的數據。
    3)我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢。
    4)所以,現在我們使用關係型數據庫管理系統(RDBMS)來存儲和管理大數據量。所謂的關係型數據庫,是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。

    • 數據庫存儲數據的優先:
    1. 可存儲大量數據;
    2. 方便檢索;
    3. 保持數據的一致性、完整性;
    4. 安全,可共享;
    5. 通過組合分析,可產生新數據。
  • 常見數據庫

    • 關係型數據庫
    1. MySQL(甲骨文)
    2. SQL Server(微軟)
    3. Oracle (甲骨文)
    4. PostgreSQL(CA國際公司)
    5. DB2(IBM)
    • 非關係型數據庫(NoSQL)
    1. Redis(鍵值存儲數據庫)
    2. MongoDB (文檔型數據庫)
  • RDBMS 術語
    1)數據庫: 數據庫是一些關聯表的集合。
    2)數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
    3)列: 一列(數據元素) 包含了相同類型的數據, 例如郵政編碼的數據。
    4)行: 一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
    5)冗餘: 存儲兩倍數據,冗餘降低了性能,但提高了數據的安全性。
    6)主鍵: 主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
    7)外鍵: 外鍵用於關聯兩個表。
    8)複合鍵: 複合鍵(組合鍵)將多個列作爲一個索引鍵,一般用於複合索引。
    9)索引: 使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
    10)參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證數據的一致性。

MySQL 爲關係型數據庫(Relational Database Management System), 這種所謂的"關係型"可以理解爲"表格"的概念, 一個關係型數據庫由一個或數個表格組成, 如圖所示的一個表格(圖引用菜鳥教程):

在這裏插入圖片描述

  • 表頭(header): 每一列的名稱;
  • 列(col): 具有相同數據類型的數據的集合;
  • 行(row): 每一行用來描述某條記錄的具體信息;
  • 值(value): 行的具體信息, 每個值必須與該列的數據類型相同;
  • 鍵(key): 鍵的值在當前列中具有唯一性。

MySQL安裝

在這裏插入圖片描述

  • MySQL壓縮包可解壓到任意目錄下
    注意:上一級目錄命名不能有空格

  • 新增data文件夾和my.ini文件
    下載的數據庫壓縮包解壓好後,在根目錄新建data文件夾,然後再新建my.ini文件,my.ini文件內容如下:

[mysqld]
# 設置3306端口
port=3306
# 設置mysql的安裝目錄
basedir=D:\\mysql-5.7.30-winx64
# 設置mysql數據庫的數據的存放目錄
datadir=D:\\mysql-5.7.30-winx64\\data
# 緩衝目錄
tmpdir=D:\\mysql-5.7.30-winx64\\data
# 允許最大連接數
max_connections=200
# 允許連接失敗的次數。這是爲了防止有人從該主機試圖攻擊數據庫系統
max_connect_errors=10
# 服務端使用的字符集默認爲UTF8
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
# 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8

[mysqld]
explicit_defaults_for_timestamp=true

這裏有個坑,如果你的MySQL版本高於5.6.6和低於5.7之前,關於timestamp爲null的時候,可能會報錯。解決辦法,添加或修改配置文件explicit_defaults_for_timestamp=true

  • 配置環境變量
    選擇“我的電腦”,單擊右鍵,選擇“屬性->高級->環境變量中的系統變量,對Path 這個系統變量設置如下相應的值(設置原則:如果存在相應的變量,直接對該變量進行編輯,注意只添加不刪除;如果該變量不存在,則新建後再編輯。如圖所示:

在這裏插入圖片描述
在這裏插入圖片描述
編輯完成後,點擊確定按鈕配置已完成,記住一定是3個確定

  • 獲取初始密碼
    以管理員身份運行命令提示符(即:cmd),進入mysql安裝目錄,執行以下命令。打印日誌輸出onA<=Dis>45S一個臨時的密碼,一定要記住,方便更改密碼。
mysqld --initialize --console
OR
mysqld --initialize --user=mysql --console

在這裏插入圖片描述

mysqld --remove mysql  // 刪除MySQL服務
mysqld --install  // 安裝MySQL服務

在這裏插入圖片描述
Win + R打開命令行窗口,輸入services.msc命令,確認是否安裝成功,如圖所示:

在這裏插入圖片描述
在這裏插入圖片描述

  • Win + R 輸入 cmd 打開命令行窗口
mysql -V // 打印輸出版本信息

在這裏插入圖片描述

  • 啓動服務命令
net start mysql // 啓動服務
net stop mysql // 停止服務

在這裏插入圖片描述

這裏有個坑,如圖所示:

在這裏插入圖片描述

  • 修改初始密碼
    打開命令行窗口,執行以下命令,登錄本機MySQL服務器,如圖所示:
// 完整的命令 mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -u root -p // mysql -h 主機名 -P 端口號 -u 用戶名 -p
Enter password: ************ // 輸入初始密碼
mysql> alter user user() identified by "新密碼";

在這裏插入圖片描述
退出登錄服務命令,代碼如下:

mysql> exit
OR
mysql> quit

如需瞭解更多MySQL相關知識,博主推薦以下文章閱讀:

MySQL可視化工具

博主比較懶,不想敲SQL命令,推薦一款Navicat Premium12可視化工具,操作方便快捷,而且是免費破解版,非常好用,破解方法請移步到https://www.cnblogs.com/kingvi/p/12495487.html

在這裏插入圖片描述

創建連接成功後,雙擊本地數據庫,圖標變亮,表示已連接,然後右鍵,下拉選擇新建數據庫,如圖所示:

在這裏插入圖片描述

點擊確定後,mytest數據庫創建成功,接下來我們可以根據功能需求進行表結構的設計。現在創建一個新表,表名user,表字段爲:姓名(name:string)、性別(sex: int)、年齡(age: int)。如圖所示:

在這裏插入圖片描述

user表創建成功後,可以試着手動添加一條,實際項目開發中,執行SQL語句命令可以提交開發效率。

在這裏插入圖片描述

快速建表

快速創建user表的SQL語句命令如下:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID,自動遞增',
  `name` varchar(32) NOT NULL COMMENT '姓名',
  `sex` int(11) NOT NULL COMMENT '性別:0 - 男 1 - 女',
  `age` varchar(10) NOT NULL COMMENT '年齡',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在這裏插入圖片描述

部署開發

本地部署後端服務,採用NodeJS來連接MySQL數據庫。

首先根據本機系統環境安裝NodeJS,請移步到NodeJS官網下載指定安裝包,下載本地後,雙擊安裝包,根據彈框提示操作步驟完成安裝。

在這裏插入圖片描述

檢查NodeJS版本,代碼如下:

node -v // 輸出版本號,說明已安裝成功

在這裏插入圖片描述
如需瞭解更多NodeJS相關知識,推薦閱讀NodeJS入門教程

NodeJS連接數據庫

  1. 新建文件夾node-mysql-demo
mkdir node-mysql-demo
  1. 創建package.json文件
npm init

在這裏插入圖片描述

  1. 新建app.js文件,作爲程序入口,創建服務器。
// app.js
const http = require('http'); // 引入http模塊
const server = http.createServer((req, res) => { // 創建http服務器
	res.end('hello node-mysql');
})
server.listen(3000, () => { // listen方法監聽3000端口
	console.log('服務啓動成功 http://localhost:3000');
}) 

http服務器創建完成後,執行以下命令:

node app.js

在這裏插入圖片描述
在這裏插入圖片描述

  1. 安裝MySQL驅動
npm install -S mysql
OR
cnpm install -S mysql

在這裏插入圖片描述
在這裏插入圖片描述

  1. 連接數據庫
// app.js
const http = require('http'); // 引入http模塊
const mysql = require('mysql'); // 引入mysql模塊

let connection = mysql.createConnection({ // 創建mysql實例
	host: '127.0.0.1',
	port: '3306',
	user: 'root',
	password: '123456',
	database: 'mytest'
})
connection.connect();

let sql = 'select * from user'; // 查詢語句
let str = '';
connection.query(sql, (err, result) => {
	if (err) {
		console.log('[select error]:', err.message);
		return;
	}
	str = JSON.stringify(result);
	console.log(str); // 數據庫查詢結果返回到result中
})

const server = http.createServer((req, res) => { // 創建http服務器
	res.end(str); // 發送響應數據
})

connection.end();

server.listen(3000, () => { // listen方法監聽3000端口
	console.log('服務啓動成功 http://localhost:3000');
})

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

寫在最後

附上一張MySQL總結的思維導圖:

在這裏插入圖片描述

先寫到這吧,等我的NodeJS全棧項目完成後,會專門使用NodeJS+Express+MySQL技術棧,分享一篇項目實戰講解增刪改查(CRUD)和RESTFUL API(前後端分離含前端界面)。此文如有不妥之處,還請批評指正。能幫到大家,就請給個點贊或收藏,謝謝你的支持。

歡迎關注個人公衆號:懶人碼農
在這裏插入圖片描述

推薦相關優質文章閱讀:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章