1.数据库简介 1.数据库的能干什么 持久的存储数据
备份和恢复数据
快速的存取数据
权限控制
2.数据库的类型 1.关系数据库 特点:以表和表的关联构成的数据结构
优点:能表达复杂的数据关系。强大的查询语言,能精确查找想要的数据
缺点:读写性能比较差,尤其是海量数据的读写。数据结构比较死板
用途:存储结构复杂的数据
代表:Oracle、MySql、Sql Server
2.非关系型数据库 特点:简单的结构存储数据,文档型,键值对
优点:格式灵活,海量数据读写效率很高
缺点:难以表示复杂的数据结构,对于复杂查询效率不好
用途:存储结构简单的数据
代表:MongoDB,Redis,Membase
3.面向对象数据库 3.术语 DB: database 数据库
DBA:database administrator 数据库管理员
DBMS:database management system 数据库管理系统
DBS:database system 数据库系统
2.MySql的安装 1.MySql特点 ①关系型数据库,开源(商用版、社区版),轻量,快速
②瑞典MySQL AB 公司开发,现已被Oracle收购
2.安装MySql 下载 : https://dev.mysql.com/downloads/mysql/
安装
第一步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aOOB1NFL-1636255700795)(imgs/image-20210321151118321.png)]
只需要服务即可
第二步
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9NCdyPev-1636255700798)(imgs/image-20210321151353874.png)]
检测依赖状态,选中,点击Execute
后面全都下一步,有一个地方需要输入密码,输入,自己记住即可
1.安装完成以后去服务检测即可
2.输入cmd,输入mysql,如果错误,配置环境变量
3.使用 1.进入mysql命令交互 mysql -uroot -p
-uroot 表示使用root超级管理员登录
-p 表示使用密码登录
1.1查看当前数据库字符编码 show variables like 'character\_set\_%';
1.1.1修改默认字符编码my.ini文件 文件路径:C:\ProgramData\MySQL\MySQL Server 5.7 (ProgramData为隐藏文件夹)
设置 成utf8或者utf8mba
utf8mba的格式占4个字节,可以存一些特殊的繁体字,自行配置即可
1.1.2将my.ini文件放到mysql的安装目录中 1.1.3重启mysql服务 ①图形化界面重启(推荐) 我的电脑右键-> 服务和应用程序 -> 服务
②cmd命令行重启,必须用管理员打开cmd窗口
net stop 服务名称
net start 服务名称
1.2 查看当前拥有的数据库 show databases;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ned2HZlS-1636255700800)(imgs/image-20210321160112966.png)]
默认有四个系统数据库,不管即可
2.navicat或者dataGrip 3.数据库设计 1.SQL Structured Query Language 结构化查询语言
大部分关系型数据,拥有着基本一致的SQL语法
1.DDL Data Definition Language 数据定义语言
操作数据库对象:库、表、视图、储存过程
2.DML Data Manipulation Language 数据操控语言
操作数据库中的记录
3.DCL Data Control Language 数据控制语句
操作用户权限
2.管理库 1.创建库
CREATE DATABASE 数据库名;
2.切换当前库
use 数据库名称;
3.删除库
drop database <数据库名>;
3.管理表 创建表
字段名
字段类型(前端常用类型)
①bit&#xff1a;占1位&#xff0c;0或1&#xff0c;false或true
②int&#xff1a;占32位&#xff0c;整数
③decimal(M,N)&#xff1a;能精确计算的实数&#xff0c;M是总的数字位数&#xff0c;N是小数位数
④char(n)&#xff1a;固定长度位n的字符
⑤varchar(n)&#xff1a;长度可变&#xff0c;最大长度位n的字符
⑥text&#xff1a;大量的字符
⑦date&#xff1a;仅日期
⑧datetime&#xff1a;日期和时间
⑨time&#xff1a;仅时间
是不是null
自增 必须是主键
默认值
修改表
删除表
DROP TABLE 数据库名称 .表名称; //不在当前库 DROP TABLE 表名称; //在当前库
4.主键和外键 1.主键 根据设计原则&#xff0c;每张表都要有主键
主键必须满足的要求&#xff1a;唯一、不能更改、无业务含义
2.外键 用于产生表关系的列
外键列会连接到另一张表&#xff08;或自己&#xff09;的主键
5.表关系 1.一对一 一个A对应一个B&#xff0c;一个B对应一个A
例如&#xff1a;数据量特别大的情况
2.一对多 一个A对应多个B&#xff0c;一个B对应一个A&#xff0c;A和B是一对多&#xff0c;B和A是多对一
例如&#xff1a;班级和学生&#xff0c;用户和文章&#xff0c;省市区三级选择
3.多对多 一个A对应多个B&#xff0c;一个B对应多个A
例如&#xff1a;学生和老师
6.三大设计范式 要求数据库表的每一列都是不可分割的原子数据项
非主键列必须依赖于主键列
非主键列必须直接依赖主键列
7.表记录的增删改 DML:Data Manipulation Language 数据操控语言
增 CREATE
增加一条数据&#xff1a;INSERT INTO student ( 字段1 , 字段2 , 字段3 , 字段4. . . ) VALUES ( 值1 &#xff0c;值2 &#xff0c;值3 &#xff0c;值4. . . ) ; 增加多条数据&#xff08;用&#xff0c;分隔开即可&#xff09;&#xff1a;INSERT INTO student ( 字段1 , 字段2 , 字段3 , 字段4. . . ) VALUES ( 值1 &#xff0c;值2 &#xff0c;值3 &#xff0c;值4. . . ) , ( 值1 &#xff0c;值2 &#xff0c;值3 &#xff0c;值4. . . ) ;
改 UPDATE
UPDATE student SET &#96;字段&#96;&#61;&#39;值&#39; //修改字段的所有值 WHERE id&#61;num; //修改增加条件
删 DELETE
DELETE FROM 表名 //清空 WHERE name&#61;&#39;张三211&#39;; //增加条件删除
8.单表查询 select *,as,case,distinct
from where &#61;,in,is,is not,>,<,>&#61;,<&#61;,between,like,and,or
order by asc 升序,desc降序
limit(n,m) n,m 跳过n条数据&#xff0c;取出m条数据
运行顺序 from -> where -> select -> order by -> limit
9.联表查询 笛卡尔积 左连接 左外连接&#xff0c;left join
右连接 右外连接&#xff0c;right join
内连接 inner join
10.mysql驱动程序 1.什么是驱动程序 定义 驱动程序是连接内存和其他存储介质的桥梁
mysql驱动 mysql驱动程序是连接内存数据和mysql数据的桥梁
mysql驱动程序 mysql 官方驱动
mysql2 第三方驱动&#xff0c;以前叫mysql-native。现基本与官方驱动合并
2.参考地址 https://github.com/sidorares/node-mysql2#readme
3.防止sql注入 sql注入
用户通过注入sql语句到最终查询中&#xff0c;导致了整个sql与预期行为不符
变量的内容不作为任何sql关键字
11.npm 包管理工具 node6.x以上自动集成npm 基本命令&#xff1a; npm -v 查看包管理工具的版本 npm init npm初始化配置文件 npm install 资源名 --save 下载资源 npm i 资源名 --save 下载资源 npm uninstall 资源名 --save 卸载资源 npm uni 资源名 --save 卸载资源 –save 把资源下载至开发依赖中 dependencies –save-dev 把资源下载至线上依赖中 devDependencies -g 把资源下载到全局 npm update 资源名 更新资源 npm ls 查看安装的模块
cnpm 淘宝镜像 命令与npm一样
下载驱动 mysql2 连接数据库
const mysql &#61; require("mysql2/promise")async function test(){// 创建一个数据库连接const connection &#61; await mysql.createConnection({host: &#39;localhost&#39;,port : &#39;3306&#39;,user: &#39;root&#39;,password : &#39;root&#39;,database: &#39;school&#39;});const [results] &#61; await connection.query( &#39;SELECT * FROM &#96;company&#96;;&#39;)console.log(results)connection.end()//关闭数据库连接 }test()
下载sequelize后 连接数据库变得更方便功能也更多
// 连接数据库const { Sequelize } &#61; require(&#39;sequelize&#39;);const sequelize &#61; new Sequelize(&#39;myscholl&#39;, &#39;root&#39;, &#39;root&#39;, {host: &#39;localhost&#39;,dialect: &#39;mysql&#39; });// 创建一个数据库连接的实力依赖的是连接池&#xff0c;所以不需要我们手动关闭数据库连接 // 有场景需要可以使用sequelize.close()进行关闭module.exports &#61; sequelize;