【前端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 了,重启之后进入服务就删掉了。