数据库与身份认证
一、数据库的基本概念
1.1 什么是数据库
数据库是用来组织、存储和管理数据的仓库
方便管理互联网世界中的数据 就有了数据库管理系统的概念(数据库)
对数据库中的数据进行新增 查询 更新 删除
1.2 常见的数据库及分类
1.3 传统型数据库的数据组织结构
数据的组织结构: 指的就是数据以什么样的结构进行存储
传统型数据库的数据组织结构,于Excel中数据的组织结构类似
1.3.1 Excel 的数据组织结构
包含工作簿 工作表 数据行 列
1.3.2 传统型数据库的数据组织结构
包含数据库 数据表 数据行 字段
1.3.2 实际开发中库、表、行、字段的关系
二、安装并配置MySQL
2.1 需要安装哪些MyAQL相关软件
MySQL Server:专门用来提供数据存储和服务的软件。
MySQL Workbench:可视化的 MySQL 管理工具,通过它,可以方便的操作存储在 MySQL Server 中的数据。
2.2 windows环境下安装
三、MySQL的基本使用
3.1 使用MySQL Workbench管理数据库
3.1.1 连接数据库
3.1.2 主界面的组成部分
3.1.3 创建数据库
3.1.4 创建数据表
3.1.5 向表中写入数据
3.1.6 数据类型与字段的特殊标识
数据类型
int 整数
tinyint(1) 布尔值
varchar(len) 字符串
特殊标识
PK(Primay Key) 主键 唯一标识
NK(Not Null) 值不允许为空
UQ(Unique) 唯一
AI(Auto Increment) 值自动增长
3.2 什么是SQL管理数据库
3.2.1 什么是SQL
SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
SQL是一门数据库编程语言
使用SQL语言编写出来的代码 叫做SQL语句
SQL语言只能在关系型数据库中使用(例如MySQL,Oracle SQL Server)
非关系型数据库 (例如Mongodb)不支持SQL语言
3.2.2 SQL能做什么
3.2.3 SQL的学习目标
select 查询语句
insert into 插入数据
update 更新数据
delete 删除数据
where 条件语句
and 和 or 运算符
order by 排序
count(*) 数量函数
3.3 查询语句
3.3.1 语法
SELECT 语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集)
3.3.2 查询 示例
-- 通过*号把user表中的数据 查询出来
select * from users
3.3.3 查询列名称 示例
-- 从users表中把name 和 password查询出来
select username, password from users
3.4 插入语句
3.4.1 语法
INSERT INTO 语句用于向数据表中插入新的数据行
3.4.2 插入 示例
-- 向users 插入新数据 username的值是tony stark ps的值为098123
insert into users (username,password) values ('tony stark','098123')
3.5 更新语句
3.5.1 语法
Update 语句用于修改表中的数据
3.5.2 更新示例-更新某一行中的一个列
-- 将id为4的用户 密码改为888888
update users set password='888888' where id=4
3.5.3 更新示例-更新某一行中的若干列
-- 把 users 表中 id 为 2 的用户密码和用户状态,分别更新为 admin123 和 1
update users set username='admin123',status=1 where id=2
3.6 删除语句
3.6.1 语法
DELETE 语句用于删除表中的行
3.6.2 删除示例
-- 从 users 表中,删除 id 为 4 的用户
delete from users where id=4
3.7 SQL中的WHERE子句
3.7.1 语法
WHERE 子句用于限定选择的标准。在 SELECT,UPDATE、DELETE 语句中,皆可使用 WHERE 子句来限定选择的标准。
3.7.2 可在WHERE子句中使用的运算符
3.7.3 WHERE子句示例
-- WHERE 子句使用
-- select * from users where status=1
-- select * from users where id>=2
-- select * from users where id<>2
-- select * from users where id!=2
3.8 SQL的AND和OR运算符
3.8.1 语法
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
3.8.2 AND运算符示例
-- 使用 AND 来显示所有 status 为 0,并且 id 小于 3 的用户
select * from users where status=0 and id<3
3.8.3 OR运算符示例
-- 使用 OR 来显示所有 status 为 1,或者 username 为 zs 的用户
select * from users where status=1 or username='张三'
3.9 SQL的ORDER BY子句
3.9.1 语法
ORDER BY 语句用于根据指定的列对结果集进行排序。(默认升序) 降序(desc)
3.9.2 ORDER BY子句-升序排序
-- 对 users 表中的数据,按照 status 字段进行升序排序 asc表示升序(默认)
select * from users ORDER BY status
3.9.3 ORDER BY子句-降序排序
-- 对 users 表中的数据,按照 id 字段进行降序排序 desc表示降序
select * from users order by id desc
3.9.4 ORDER BY子句-多重排序
-- 对 users 表中的数据,先按照 status 字段进行降序排序,再按照 username 的字母顺序,进行升序排序
select * from users order by status desc,username asc
3.10 SQL的COUNT(*)函数
3.10.1 语法
COUNT(*) 函数用于返回查询结果的总数据条数
3.10.2 COUNT(*)示例
-- 查询 users 表中 status 为 0 的总数据条数
select count(*) from users where status=0
3.10.3 使用AS为列设置别名
-- 如果希望给查询出来的列名称设置别名,可以使用 AS 关键字
-- select count(*) as total from users where status=0
select username as uname,password as pd from users
四、在项目中操作MySQL
4.1 在项目中操作数据库的步骤
1、安装操作MySQL数据库的第三方模块
2、通过mysql模块连接到MySQL数据库
3、通过mysql模块执行SQL语句
4.2 安装与配置mysql模块
4.2.1 安装mysql模块
初始化项目操作,生成package.json 文件
npm init -y
安装mysql模块 托管与mysql上的第三方模块
npm install mysql
4.2.2 配置mysql模块
//1. 导入mysql模块
const mysql = require('mysql')
//2. 建立于MySQL 数据库的连接
const db = mysql.createPool({
host: '127.0.0.1', //数据库的id地址
user: 'root', //登录数据库的账号
password: 'admin123', //登录数据库的密码
database: 'my_db_01', //指定要操作的数据库名称
})
4.2.3 测试mysql模块能否正常工作
//测试mysql 模块能否正常工作
db.query('select 1', (err, results) => {
//mysql模块工作期间报错了
if (err) return console.log(err.message);
//能够成功的执行sql语句
console.log(results);
})
4.3 使用mysql模块操作MySQL数据库
4.3.1 查询数据
//查询users 表中的所有数据
const sqStr = 'select * from users'
db.query(sqStr, (err, results) => {
if (err) return console.log(err.message);
//查询数据成功
//如果执行的是 select 查询语句 则执行的结果results是数组格式
console.log(results);
})
4.3.2 插入数据
//向users中新增一条数据 username为Splider-man password的值为pcc123
let user = {
username: 'Splider-man',
password: 'pcc123'
}
//定义待执行的sql语句 ?表示占位符
const sqlStr = 'insert into users (username,password) values(?,?)'
//执行sql语句
db.query(sqlStr, [user.username, user.password], (err, results) => {
if (err) return console.log(err.messagee);
//如果执行的是 insert into插入语句 则results是一个对象
//成功
if (results.affectdRows === 1) {
console.log('插入数据成功', results);
}
})
4.3.3 插入数据的便捷方法
const user = {
username: 'Splider-man2',
password: 'pcc4321'
}
//定义待执行的sql语句
const sqlStr = 'insert into users set ?'
//执行sql语句
db.query(sqlStr, user, (err, results) => {
if (err) return console.log('err', err.message);
//插入成功
if (results.affectedRows === 1) {
console.log('插入数据成功');
}
})
4.3.4 更新数据
定义要更新的数据对象
const user = {
id: 6,
username: 'aaa',
password: '000'
}
//定义sql语句
const sqlStr = 'update users set username=?,password=? where id=?'
//执行sql语句
db.query(sqlStr, [user.username, user.password, user.id], (err, results) => {
if (err) return console.log('更新失败', err.message);
//执行update语句之后 执行的结果 也是一个对象
if (results.affectedRows === 1) {
console.log('更新成功');
}
})
4.3.5 更新数据的便捷方式
const user = {
id: 6,
username: 'aaaa',
password: '0000'
}
//定义sql语句
const sqlStr = 'update users set ? where id=?'
//执行sql语句
db.query(sqlStr, [user, user.id], (err, results) => {
if (err) return console.log('更新失败', err.message);
//执行update语句之后 执行的结果 也是一个对象
if (results.affectedRows === 1) {
console.log('更新成功');
}
})
4.3.6 删除数据
const sqlStr = 'delete from users where id=?'
//执行sql语句
//如果有多个占位符 必须用数组包含
//如果只有一个 可以省去
db.query(sqlStr, 5, (err, results) => {
if (err) return console.log(err.message);
//执行delete 结果也是一个对象
if (results.affectedRows === 1) {
console.log('删除成功');
}
})
4.3.7 标记删除
const sqrStr = 'update users set status=? where id=?'
//执行sql语句
db.query(sqrStr, [1, 6], (err, results) => {
if (err) return console.log(err.message);
if (results.affectedRows === 1) {
console.log('标记删除成功');
}
})