阅读 953

前端必知必会MySQL的那些事儿 - NodeJS全栈成长之路

前言

博主不是搞技术出身,属于半路出家(别误会,不是剃度当和尚),而是以前从事的餐饮服务行业,跟现在完全不沾边。由于热爱,喜欢专研技术(说白了就是高大上,重点薪水高,哈哈)。所以到后来有了一个180度的转变,迷上了搞IT(经常被挨踢)互联网,虽然过程很痛苦,经历过网页设计 - 切图仔 - 网页制作(JS特效) - 前后端分离(小程序、H5移动端、PC端) - 最后到全栈工程师(我的奋斗目标),但收获的结果你懂的。(CSDN首发

在这里插入图片描述

前面废话太多,请勿喷我,由于最近在做一个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社区版windows 64位

dev.mysql.com/downloads/m…

在这里插入图片描述

* 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可视化工具,操作方便快捷,而且是免费版,非常好用,下载安装使用请移步到www.cnblogs.com/kingvi/p/12…

在这里插入图片描述

创建连接成功后,双击本地数据库,图标变亮,表示已连接,然后右键,下拉选择新建数据库,如图所示:

在这里插入图片描述

点击确定后,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
复制代码

2. 创建package.json文件

npm init
复制代码

在这里插入图片描述

3. 新建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
复制代码

在这里插入图片描述

在这里插入图片描述

4. 安装MySQL驱动

npm install -S mysql
OR
cnpm install -S mysql
复制代码

在这里插入图片描述

在这里插入图片描述

5. 连接数据库

// 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(前后端分离含前端界面)。此文如有不妥之处,还请批评指正。能帮到大家,就请给个赞或收藏,谢谢你的支持。

推荐相关优质文章阅读

获取更多项目实战经验及各种源码资源,请关注作者公众号:懒人码农