【前端39_数据库】数据库基础、Node 中链接数据库并使用
数据库
为什么要用数据库
数据持久化保存,如果用文件保存的话,增删查改的话会比较费劲
下载
基本操作
建立表
我去之前连建表都没写,淦!写的笔记也太不完善了。
今年建表遇到个问题
我用navcat 去修改数据也会报错
这说明是建数据库的时候数据集设置的不对。

我尝试了在原有的 database 上修改数据集,但是还是不可以输入中文,无奈只能删掉数据库重新建表
1 | utf8; |
增:INSERT INTO
1 | INSERT INTO 表名(字段一,字段二,字段三) VALUES ("值一","值二",值三); |

删:DELETE FROM
1 | DELETE FROM 表名 条件语句; |
假删除
思路:通过更新代替删除
操作:添加个字段:is_delete
改:UPDATE
如果改的字段比较多的话,是不需要添加括号的,添加括号之后 Node 会提示报错。
注意:WHERE 不可以提前,在 node 中会不好使
1 | UPDATE 表名 SET 字段='值' 条件语句 |
查:SELECT FROM *
1 | SELECT * FROM 表名 条件语句; |
这里的
*指的是字段,要查找的字段

查询细分
条件查询
OR、AND- 符号:
>、<、=、<>不等、!=也是不等、 - 排列:正序:
ASC(默认)、倒叙:DESC,eg:SELECT * FROM org_hierarchy ORDER BY sort ASC - 分页相关:
LIMIT,有两个参数,LIMIT 从什么位置开始查询,查询几条,(举例:SELECT * FROM user ORDER BY age LIMIT 0,5;) - 判断字段是否为
NULL:IS NULL,中间可以加NOT变成IS NOT NULL
模糊查询:LIKE
需要
LIKE,和一个占位符, 例如:SELECT * FROM user WHERE userName LIKE '李%'如果是中间的字符的话,可以这样查询,用两个占位符

联表查询:JOIN ON
关系型数据 JOIN ON
举例子:比方说我有两张表,内容如下


这是以左边的 products 为主表,
1 | SELECT * FROM products LEFT JOIN users ON products.uid = users.id; |

这是以右边为主表的查询
1 | SELECT * FROM products RIGHT JOIN users ON products.uid = users.id; |

Node 中链接数据库
基本写法
首先引入 mysql2 这个模块,mysql2 是 mysql 的二次封装,添加了 promise 等
然后通过 mysql2.createConnection({}) 填写好配置信息,建立链接:
1 | const mysql2 = require("mysql2"); |
数据查询用 connection.query(),会提供一个回调函数,查询的结果放到了回调函数中的 res 中
Promise 写法
这样写不够优雅,可以通过 connection.promise()把数据变成Promise类型的,然后查询的内容放到了 query里,再把rows 解构出来
修改成 Promise 后如下图
1 | const mysql2 = require("mysql2"); |

数组解构
为什么可以这样找出 rows 呢,这里其实是数组的解构,相当于我们把数组的第 0 项拿出来,并赋值给 rows,所以这里的rows起什么名字都可以哦
1 | const [rows] = await connection |
判断查询是否成功
如何查看插入成功了呢?看:affectedRows: 1

忘记数据库密码(windows)
1 | C:\Users\10074>mysql |
报这个鸟错误啊,重新修改密码
- 在 url 中输入
%ProgramData%找到路径
改着改着密码想起来了,淦
删除 service
建数据库的时候,有个服务名字重复了,对就是 mysql57,
- 进入管理员权限的 cmd ,然后
sc delete 服务名,如果有通知你删除成功,那么就 ok 了,重启之后进入服务就删掉了。








