数据库与身份认证(学习自用)

张春  金牌会员 | 2024-8-20 16:48:48 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 570|帖子 570|积分 1710

数据库与身份认证

数据库的根本概念


  • 什么是数据库
    数据库(database)是用来构造、存储和管理数据的堆栈。
  • 常见的数据库及分类
    市面上常见的数据库:

    • MySQL数据库(免费开源,Community(免费)+Enterprise(收费))
    • Oracle数据库(收费)
    • SQL Server数据库(收费)
    • Mongodb数据库(Community+Enterprise)
      其中,MySQL,Oracle、SQL Server属于传统型数据库(又叫做:关系型数据库或SQL数据库),这三者的计划理念雷同,用法雷同。
      而Mongodb属于新型数据库(又叫做:非关系型数据库或NoSQL数据库),它在一定水平上补充了传统型数据库的缺陷。

  • 传统型数据库的数据构造结构
    数据的构造结构:指的就是数据以什么样的结构举行存储。
    在传统型数据库中,数据的构造结构分为数据库(database)、数据表(table)、数据行(row)、字段(field)这4大部分组成。
    现实开发中库、表、行、字段的关系

    • 在现实项目开发中,一样平常情况下,每个项目都对应独立的数据库。
    • 差别的数据,要存储到数据库的差别表中,例如:用户数据存储到users表中,图书数据存储到books表中。
    • 每个表中详细存储哪些信息,由字段来决定,例如:我们可以为users表计划id、username、password这三个字段。
    • 表中的行,代表每一条详细的数据。

安装并配置MySQL


  • 了解需要安装哪些MySQL相关的软件
    对于开发人员来说,只需要安装MySQL Server和MySQL Workbench这两个软件,就能满足开发的需要了。

    • MySQL Server:专门用来提供数据存储和服务的软件
    • MySQL Workbench:可视化的MySQL管理工具,通过它,可以方便的操作存储在MySQL Server中的数据。Navicat也可以。

MySQL的根本利用


  • DataType数据类型:

    • int整数
    • varchar(len)字符串
    • tinyint(1)布尔值

  • 字段的特殊标识:

    • PK(Primary Key)主键、唯一标识
    • NN(Not Null)值不允许为空
    • UQ(Unique)值唯一
    • AI(Auto Increment)值自动增长
    • Default/Expression 默认值

  • 什么是SQL
    SQL(Structured Query Language)是结构化查询语言,专门用来访问和处置处罚数据库的编程语言。能够以编程的情势,操作数据库里面的数据。
    关键点:

    • SQL是一门数据库编程语言
    • 利用SQL语言编写出来的代码,叫做SQL语句
    • SQL语言只能在关系型数据库中利用。非关系型数据库不支持SQL语言

  • SELECT语句

    • SELECT语句用于从表中查询数据,执行结果被存储在一个结果集(表)中。
    1. select * from 表名
    2. select 列名 from 表名
    复制代码
    注意:SQL语句关键字对巨细写不敏感。
       



      • 表示所有列


  • INSERT INTO语句

    • INSERT INTO语句用于向数据表中插入新的数据行。
    1. insert into table_name (列1,列2,...) values (值1,值2,...)
    复制代码

  • UPDATE语句

    • UPDATE语句用于修改表中的数据。
    1. update 表名 set 列名=新值 where 列名=某值
    复制代码

  • DELETE语句

    • DELETE语句用于删除表中的行
    1. delete from 表名 where 列名=值
    复制代码

  • WHERE子句

    • WHERE子句用于限定选择的尺度。在SELECT、UPDATE、DELETE语句中,皆可利用WHERE子句来限定选择的尺度
    1. select * from 表名 where 列 运算符 值
    复制代码
      

    • 运算符
      <> :不等于
      BETWEEN :在某个范围内
      LIKE:搜索某种模式

  • AND和OR运算符

    • AND表示必须同时满足多个条件,相称于js中的&&
    • OR表示只要满足一个条件即可,相称于js中的||

  • ORDER BY子句
  • ORDER BY语句用于根据指定的列对结果集举行排序
  • ORDER BY语句默认按照升序对记录举行排序
  • 降序可用DESC关键字,ASC代表升序
  1. select * from users order by status ASC
复制代码
  1.   4. 多重排序
复制代码
  1. select * from users order by status ASC
  2. ,username DESC
复制代码

  • COUNT(*)函数
  • COUNT(*)函数用于返回查询结果的总数据条数
  1. select count(*) from 表名
复制代码
  1.   2. 使用AS为列设置别名
复制代码
  1. select count(*) as total from users where status=0
复制代码
在项目中操作数据库

操作步调



  • 安装操作MySQL数据库的第三方模块(mysql)
  • 通过mysql模块连接到MySQL数据库
  • 通过mysql模块执行SQL语句

  • 安装mysql模块(mysql5版本用这个,mysql8以上要用mysql2模块)
    mysql模块是托管于npm上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数 据库的能力。想要在项目中利用它,需要先运行如下下令,将mysql安装为项目标依靠包:
    1. mysql5:
    2. npm install mysql
    3. mysql8以上:
    4. npm install mysql2
    复制代码
  • 配置mysql模块
    在利用mysql模块操作MySQL数据库之前,必须先对mysql模块举行必要的配置,主要的配置步调如下:
    1. //1.导入mysql模块(mysql5)
    2. const mysql=require('mysql')
    3. //mysql8:
    4. const mysql=require('mysql2')
    5. //2.建立与MySQL数据库的连接
    6. const db=mysql.createPool({
    7.     host:'127.0.0.1',        //数据库的ip地址
    8.     user:'root',                        //登录数据库的账号
    9.     password:'123456',        //登录数据库的密码
    10.     database:'my_db_01'        //指定要操作哪个数据库
    11. })
    复制代码
  • 测试mysql模块能否正常工作
    调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果:
    1. //检测mysql模块能否正常工作
    2. db.query('SELECT 1',(err,results)=>{
    3.     if(err) return console.log(err.message)
    4.     //只要能打印出[ RowDataPacket {'1':1}]的结果,就证明数据库连接正常
    5.     console.log(results)
    6. })
    复制代码
    报错记录:
    Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    这个题目是由于MySQL服务器哀求的身份验证协议不受客户端支持所导致的。这种情况通常发生在MySQL服务器利用了新的身份验证协议,而客户端不支持该协议时。
    办理方法:

    • 更改MySQL用户的身份验证方式: 您可以尝试将MySQL用户的身份验证方式更改为旧的方式,以使客户端能够成功连接。例如,对于MySQL v8.0,可以利用以下下令更改用户的身份验证方式:
    1. ALTER USER 'username'@'localhost' IDENTIFIED WITH            mysql_native_password BY 'password';
    复制代码
      

    • 利用支持新身份验证协议的MySQL客户端: 如果您的MySQL服务器利用了新的身份验证协议,发起升级或利用支持该协议的MySQL客户端。例如,可以尝试利用mysql2包替代mysql包。
    • 检查MySQL服务器配置: 确保MySQL服务器的身份验证设置与客户端兼容。有时间,服务器端的配置可能导致客户端无法连接。

利用mysql模块操作mysql数据库


  • 查询数据
  1. //查询users表中所有的用户数据
  2. db.query('select * from users',(err,results)=>{
  3.     //查询失败
  4.     if(err) return console.log(err.message)
  5.     //查询成功
  6.     //注意如果执行的是select查询语句,则执行的结果是数组
  7.     console.log(results)
  8. })
复制代码

  • 插入数据
  1. //1.要插入到users表中的数据对象
  2. const user={ username:'Spider-Man',password:'pcc321' }
  3. //2.待执行的SQL语句,其中英文的?表示占位符
  4. const sqlStr='insert into users (username,password) values (?,?)'
  5. //3.使用数组的形式,依次为?占位符指定具体的值
  6. db.query(sqlStr,[user.username,user.password],(err,results)=>{
  7. if(err) return console.log(err.message)//失败
  8. //可以通过affectedRows属性,来判断是否插入数据成功
  9. //使用insert into语句返回的results类型是对象
  10. if(results.affectedRows===1){ console.log('插入数据成功') }//成功
  11. })
复制代码

  • 插入数据的便捷方式
    向表中新增数据时,数据对象的每个属性跟数据表的字段一一对应,可以用:
  1. //1.要插入到users表中的数据对象
  2. const user={ username:'Spider-Man2',password:'pcc321' }
  3. //2.待执行的SQL语句,其中英文的?表示占位符
  4. const sqlStr='insert into users set ?'
  5. //3.直接将数据对象当作占位符的值
  6. db.query(sqlStr,user,(err,results)=>{
  7. if(err) return console.log(err.message)//失败
  8. if(results.affectedRows===1){ console.log('插入数据成功') }//成功
  9. })
复制代码

  • 更新数据
  1. //1.要更新的数据对象
  2. const user={ id:7,username:'aaa',password:'000' }
  3. //2.要执行的SQL语句
  4. const sqlStr='update users set username=?,password=? where id=?'
  5. //3.调用db.query()执行SQL语句的同时,使用数组依次为占位符指定的值
  6. db.query(sqlStr,[user.username,user.password,user.id],(err,results)=>{
  7. if(err) return console.log(err.message)//失败
  8. //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否更新数据成功
  9. if(results.affectedRows===1){ console.log('更新数据成功') }//成功
  10. })
复制代码

  • 更新数据的便捷方式
  1. //1.要更新的数据对象
  2. const user={ id:7,username:'aaa',password:'000' }
  3. //2.要执行的SQL语句
  4. const sqlStr='update users set ? where id=?'
  5. //3.调用db.query()执行SQL语句的同时,使用数组依次为占位符指定的值
  6. db.query(sqlStr,[user,user.id],(err,results)=>{
  7. if(err) return console.log(err.message)//失败
  8. //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否更新数据成功
  9. if(results.affectedRows===1){ console.log('更新数据成功') }//成功
  10. })
复制代码

  • 删除数据
  1. //1.要执行的SQL语句
  2. const sqlStr='delete from users where id=?'
  3. //2.调用db.query()执行SQL语句的同时,依次为占位符指定值
  4. //注意多个占位符要用数组依次指定,单个占位符可省略数组
  5. db.query(sqlStr,6,(err,results)=>{
  6. if(err) return console.log(err.message)//失败
  7. //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否删除数据成功
  8. if(results.affectedRows===1){ console.log('删除数据成功') }//成功
  9. })
复制代码

  • 标记删除
    利用delete语句,会直接删除数据,不安全。利用标记删除来模拟删除动作。即设置status字段,来标记是否被删除。当用户执行删除操作时,数据库并没有执行delete操作而是把status改为删除状态,执行的是update操作。
  1. //标记删除:使用update代替delete,只更新数据的状态不真正删除
  2. db.query('update users set status=1 where id=?',6,(err,results)=>{
  3. if(err) return console.log(err.message)//失败
  4. //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否删除数据成功
  5. if(results.affectedRows===1){ console.log('标记删除数据成功') }//成功
  6. })
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表