node(三)--数据库

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:占1位,0或1,false或true

​ ②int:占32位,整数

​ ③decimal(M,N):能精确计算的实数,M是总的数字位数,N是小数位数

​ ④char(n):固定长度位n的字符

​ ⑤varchar(n):长度可变,最大长度位n的字符

​ ⑥text:大量的字符

​ ⑦date:仅日期

​ ⑧datetime:日期和时间

​ ⑨time:仅时间

是不是null

自增 必须是主键

默认值

修改表

删除表

DROP TABLE 数据库名称 .表名称;   //不在当前库
DROP TABLE 表名称;      //在当前库

4.主键和外键

1.主键

​ 根据设计原则,每张表都要有主键

主键必须满足的要求:唯一、不能更改、无业务含义

2.外键

​ 用于产生表关系的列

​ 外键列会连接到另一张表(或自己)的主键

5.表关系

1.一对一

​ 一个A对应一个B,一个B对应一个A

​ 例如:数据量特别大的情况

2.一对多

​ 一个A对应多个B,一个B对应一个A,A和B是一对多,B和A是多对一

​ 例如:班级和学生,用户和文章,省市区三级选择

3.多对多

​ 一个A对应多个B,一个B对应多个A

​ 例如:学生和老师

6.三大设计范式

  1. 要求数据库表的每一列都是不可分割的原子数据项

  2. 非主键列必须依赖于主键列

  3. 非主键列必须直接依赖主键列

7.表记录的增删改

DML:Data Manipulation Language 数据操控语言

增 CREATE

增加一条数据:
INSERT INTO student ( 字段1, 字段2,字段3,字段4... )
VALUES (1,值2,值3,值4...);

增加多条数据(用,分隔开即可):
INSERT INTO student ( 字段1, 字段2,字段3,字段4... )
VALUES (1,值2,值3,值4...),
(1,值2,值3,值4...);

改 UPDATE

UPDATE student SET `字段`='值'    //修改字段的所有值
WHERE id=num;                    //修改增加条件

删 DELETE

DELETE FROM 表名             //清空
WHERE name='张三211';        //增加条件删除

8.单表查询

select

*,as,case,distinct

from

where

=,in,is,is not,>,<,>=,<=,between,like,and,or

order by

asc 升序,desc降序

limit(n,m)

n,m 跳过n条数据,取出m条数据

运行顺序

from -> where -> select -> order by -> limit

9.联表查询

笛卡尔积

左连接

​ 左外连接,left join

右连接

​ 右外连接,right join

内连接

​ inner join

10.mysql驱动程序

1.什么是驱动程序

定义

驱动程序是连接内存和其他存储介质的桥梁

mysql驱动

mysql驱动程序是连接内存数据和mysql数据的桥梁

mysql驱动程序

mysql

​ 官方驱动

mysql2

​ 第三方驱动,以前叫mysql-native。现基本与官方驱动合并

2.参考地址

https://github.com/sidorares/node-mysql2#readme

3.防止sql注入

sql注入

  1. 用户通过注入sql语句到最终查询中,导致了整个sql与预期行为不符

  2. 变量的内容不作为任何sql关键字

11.npm 包管理工具

node6.x以上自动集成npm
基本命令:
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 = require("mysql2/promise")


async function test(){
    // 创建一个数据库连接
    const connection = await mysql.createConnection({
        host: 'localhost',
        port : '3306',
        user: 'root',
        password : 'root',
        database: 'school'
    });
    const [results] = await connection.query( 'SELECT * FROM `company`;')
    console.log(results)
    connection.end()//关闭数据库连接
}

test()

下载sequelize后
连接数据库变得更方便功能也更多

// 连接数据库

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize('myscholl', 'root', 'root', {
  host: 'localhost',
  dialect: 'mysql'
});


// 创建一个数据库连接的实力依赖的是连接池,所以不需要我们手动关闭数据库连接
// 有场景需要可以使用sequelize.close()进行关闭


module.exports = sequelize;

猜你喜欢

转载自blog.csdn.net/qq_45256777/article/details/121189312
今日推荐