基于 MySQL 数据库的后端数据持久化

929 阅读4分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

1、MySQL 的安装

官网:www.mysql.com/

2、应用数据的持久化

写在应用程序中的数据(变量)随着程序的运行而创建并保存在内存中,随着程序的进程的退出而销毁。所以我们需要对那些需要长期保存的数据进行持久化的存储,比如保存在硬盘文件中。

3、使用简单文本持久化数据

对于少量的、结构简单且没有太多复杂操作需求的数据,我们可以使用类似 xml、json、yml……等格式存储在一个文本文件中。

// C3-0-1 users.json
[
  {
    "id": 1,
    "username": "Kobe Bryant"
  },
  {
    "id": 2,
    "username": "James"
  }
]

4、使用MYSQL进行数据持久化

如果数据量庞大、更多的数据操作需求(查找、排序……),那么这个时候我们就需要使用一些专业的数据管理软件(数据库)来存储这些数据。

  • MySQL
  • Oracle
  • MSSQL
  • Redis
  • MongoDB
  • SQLLite
  • ……

5、mysql基本概念介绍

5-1、数据库(MySQL)术语

C/S

MySQL 使用 C/S 模式(客户端/服务端),由客户端发起连接请求 MySQL 服务器来完成对数据库数据的各种操作。

结构

'XX数据库' = {
  "用户表": [ // 一组具有相同特性的记录的集合
    // 记录
    {
      // 字段:id,值:1
      "id": 1,
      // 字段:username,值:"DaHai"
      "username": "DaHai"
    },
    {
      "id": 2,
      "username": "zMouse"
    }
  ],
  "商品表": [],
  ...
}

5-2、SQL

SQL (Structured Query Language:结构化查询语言):用户管理数据库(插入、更新、查询、删除数据,创建数据库、表结构等)的语言。

5-2-1、分类

数据定义语言(DDL)

数据库结构操作:CREATE TABLEDROP TABLE

数据查询语言(DQL: Data Query Language):

数据查询:SELECT

数据操作语言(DML:Data Manipulation Language):

数据操作:INSERTUPDATEDELETE

事务控制语言(TCL)

事务控制:COMMITROLLBACK

数据控制语言(DCL):

数据库使用用户角色管理:GRANTDENYREVOKE

6、在Node.js中链接使用mysql

6-1、Node MySQL 2

6-1-1、安装

npm i mysql2

回调版本

const mysql = require('mysql2');

基于 Promise 版本

const mysql = require('mysql2/promise');

6-1-2、链接

const connection = await mysql.createConnection({
  host: 'localhost',
  user: 'root',
  database: 'test'
});

7、常见mysql应用场景案例

7-1、添加数据

MySQL 使用 INSERT INTO 语句向指定的表中插入数据:

INSERT INTO 
`表名称` (`字段名称一`, `字段名称二`, ...`字段名称N`) 
VALUES 
(`值一`, `值二`, ...`值N`);

Tips:

  • SQL 关键字(如:SELECTINTO 等 不区分大小写)

    • INSERT INTO `users` (`from`) VALUES ('1');
      // 等价
      insert into `users` (`from`) values ('1');
      
  • 字段名称、表名称 等建议使用 `` 进行引用,避免出现 字段名称、表名称 等中包含一些 SQL 关键字而导致的错误:

    • INSERT INTO users (from) VALUES ('1');	// ❎,from 为 `SQL` 关键字
      INSERT INTO users (`from`) VALUES ('1');	//

7-2、查询数据

MySQL 使用 SELECT 语句从指定的表中查询数据:

SELECT `字段名称一`, `字段名称二`, ...`字段名称N`
FROM `表名称`
[WHERE 条件]
[ORDER BY `字段名称一` [ASC | DESC]], ...[`字段名称N` [ASC | DESC]]
[LIMIT 数量]
[OFFSET 数量]

Tips:

  • SELECT * ... ; 中的 * 表示通配符,表所有字段,但不建议使用(性能、歧义、不直观……)。
  • [] 表示为可选项。

7-2-1、where 子句

使用 where 子句可以有条件的查询数据。

操作符描述用例
=等于SELECT * FROM `users` WHERE `gender` = '男';
<>, !=不等于SELECT * FROM `users` WHERE `gender` = '';
>大于SELECT * FROM `users` WHERE `age` > 20;
<小于SELECT * FROM `users` WHERE `age` < 20;
>=大于等于SELECT * FROM `users` WHERE `age` >= 20;
<=小于等于SELECT * FROM `users` WHERE `age` <= 20;

7-2-2、组合条件

还可以使用 ANDOR 来指定多个条件。

名称描述用例
AND并且SELECT * FROM `users` WHERE `gender` = '男' AND `age` > 20;
OR或者SELECT * FROM `users` WHERE `age` < 10 OR `age` > 20;

7-2-3、排序

使用 ORDER BY 对查询出来的数据按照指定的规则进行排序。

名称描述用例
ASC升序(从小到大),默认SELECT * FROM `users` WHERE `age` > 20 ORDER BY `age` ASC;
DESC降序(从大到小)SELECT * FROM `users` WHERE `age` > 20 ORDER BY `age` DESC;
ASC, DESC组合SELECT * FROM `users` WHERE `age` > 20 ORDER BY `age` DESC, `id` ASC;

7-2-4、限制查询位置与条数

使用 limitoffset 限制查询记录的最大条数和起始位置。

名称描述用例
LIMIT n最大 n 条SELECT * FROM `users` WHERE `age` > 20 ORDER BY `age` ASC LIMIT 1;
LIMIT n OFFSET m从 m 条开始查询 n 条(LIMIT 在前,OFFSET 在后)SELECT * FROM `users` WHERE `age` > 20 ORDER BY `age` DESC LIMIT 1 OFFSET 5;
LIMIT m,n从 m 条开始查询 n 条(OFFSET 值在前,LIMIT 值在后)SELECT * FROM `users` WHERE `age` > 20 ORDER BY `age` DESC, `age` ASC LIMIT 5,1;

Tips:

OFFSET 表示偏移(跳过、忽略) 默认为 0。

7-3、更新数据

MySQL 使用 UPDATE 语句从指定的表中更新数据:

UPDATE `表名称`
SET `字段名称一`=字段值一, ...`字段名称N`=字段值N
[WHERE 条件]

Tips:

更新强烈建议使用 where 条件来进行约束,即使无条件,避免忽略导致的全量更新。

7-4、删除数据

MySQL 使用 DELETE 语句从指定的表中删除数据:

DELETE
FROM `表名称`
[WHERE 条件]

Tips:

删除强烈建议使用 where 条件来进行约束,即使无条件,避免忽略导致的全量删除。

7-5、函数

MySQL 也内置了许多函数:

参考:dev.mysql.com/doc/refman/…