大家好,欢迎来到IT知识分享网。
数据库与身份认证
数据库的基本概念
- 什么是数据库
数据库(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语句用于从表中查询数据,执行结果被存储在一个结果集(表)中。
select * from 表名 select 列名 from 表名
注意:SQL语句关键字对大小写不敏感。
-
- 表示所有列
- INSERT INTO语句
- INSERT INTO语句用于向数据表中插入新的数据行。
insert into table_name (列1,列2,...) values (值1,值2,...)
- UPDATE语句
- UPDATE语句用于修改表中的数据。
update 表名 set 列名=新值 where 列名=某值
- DELETE语句
- DELETE语句用于删除表中的行
delete from 表名 where 列名=值
- WHERE子句
- WHERE子句用于限定选择的标准。在SELECT、UPDATE、DELETE语句中,皆可使用WHERE子句来限定选择的标准
select * from 表名 where 列 运算符 值
- 运算符
<> :不等于
BETWEEN :在某个范围内
LIKE:搜索某种模式
- AND和OR运算符
- AND表示必须同时满足多个条件,相当于js中的&&
- OR表示只要满足一个条件即可,相当于js中的||
- ORDER BY子句
- ORDER BY语句用于根据指定的列对结果集进行排序
- ORDER BY语句默认按照升序对记录进行排序
- 降序可用DESC关键字,ASC代表升序
select * from users order by status ASC
4. 多重排序
select * from users order by status ASC,username DESC
- COUNT(*)函数
- COUNT(*)函数用于返回查询结果的总数据条数
select count(*) from 表名
2. 使用AS为列设置别名
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安装为项目的依赖包:mysql5: npm install mysql mysql8以上: npm install mysql2
- 配置mysql模块
在使用mysql模块操作MySQL数据库之前,必须先对mysql模块进行必要的配置,主要的配置步骤如下://1.导入mysql模块(mysql5) const mysql=require('mysql') //mysql8: const mysql=require('mysql2') //2.建立与MySQL数据库的连接 const db=mysql.createPool({ host:'127.0.0.1', //数据库的ip地址 user:'root', //登录数据库的账号 password:'', //登录数据库的密码 database:'my_db_01' //指定要操作哪个数据库 })
- 测试mysql模块能否正常工作
调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果://检测mysql模块能否正常工作 db.query('SELECT 1',(err,results)=>{ if(err) return console.log(err.message) //只要能打印出[ RowDataPacket {'1':1}]的结果,就证明数据库连接正常 console.log(results) })
报错记录:
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,可以使用以下命令更改用户的身份验证方式:
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
- 使用支持新身份验证协议的MySQL客户端: 如果您的MySQL服务器使用了新的身份验证协议,建议升级或使用支持该协议的MySQL客户端。例如,可以尝试使用mysql2包替代mysql包。
- 检查MySQL服务器配置: 确保MySQL服务器的身份验证设置与客户端兼容。有时候,服务器端的配置可能导致客户端无法连接。
使用mysql模块操作mysql数据库
- 查询数据
//查询users表中所有的用户数据 db.query('select * from users',(err,results)=>{
//查询失败 if(err) return console.log(err.message) //查询成功 //注意如果执行的是select查询语句,则执行的结果是数组 console.log(results) })
- 插入数据
//1.要插入到users表中的数据对象 const user={
username:'Spider-Man',password:'pcc321' } //2.待执行的SQL语句,其中英文的?表示占位符 const sqlStr='insert into users (username,password) values (?,?)' //3.使用数组的形式,依次为?占位符指定具体的值 db.query(sqlStr,[user.username,user.password],(err,results)=>{
if(err) return console.log(err.message)//失败 //可以通过affectedRows属性,来判断是否插入数据成功 //使用insert into语句返回的results类型是对象 if(results.affectedRows===1){
console.log('插入数据成功') }//成功 })
- 插入数据的便捷方式
向表中新增数据时,数据对象的每个属性跟数据表的字段一一对应,可以用:
//1.要插入到users表中的数据对象 const user={
username:'Spider-Man2',password:'pcc321' } //2.待执行的SQL语句,其中英文的?表示占位符 const sqlStr='insert into users set ?' //3.直接将数据对象当作占位符的值 db.query(sqlStr,user,(err,results)=>{
if(err) return console.log(err.message)//失败 if(results.affectedRows===1){
console.log('插入数据成功') }//成功 })
- 更新数据
//1.要更新的数据对象 const user={
id:7,username:'aaa',password:'000' } //2.要执行的SQL语句 const sqlStr='update users set username=?,password=? where id=?' //3.调用db.query()执行SQL语句的同时,使用数组依次为占位符指定的值 db.query(sqlStr,[user.username,user.password,user.id],(err,results)=>{
if(err) return console.log(err.message)//失败 //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否更新数据成功 if(results.affectedRows===1){
console.log('更新数据成功') }//成功 })
- 更新数据的便捷方式
//1.要更新的数据对象 const user={
id:7,username:'aaa',password:'000' } //2.要执行的SQL语句 const sqlStr='update users set ? where id=?' //3.调用db.query()执行SQL语句的同时,使用数组依次为占位符指定的值 db.query(sqlStr,[user,user.id],(err,results)=>{
if(err) return console.log(err.message)//失败 //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否更新数据成功 if(results.affectedRows===1){
console.log('更新数据成功') }//成功 })
- 删除数据
//1.要执行的SQL语句 const sqlStr='delete from users where id=?' //2.调用db.query()执行SQL语句的同时,依次为占位符指定值 //注意多个占位符要用数组依次指定,单个占位符可省略数组 db.query(sqlStr,6,(err,results)=>{
if(err) return console.log(err.message)//失败 //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否删除数据成功 if(results.affectedRows===1){
console.log('删除数据成功') }//成功 })
- 标记删除
使用delete语句,会直接删除数据,不安全。使用标记删除来模拟删除动作。即设置status字段,来标记是否被删除。当用户执行删除操作时,数据库并没有执行delete操作而是把status改为删除状态,执行的是update操作。
//标记删除:使用update代替delete,只更新数据的状态不真正删除 db.query('update users set status=1 where id=?',6,(err,results)=>{
if(err) return console.log(err.message)//失败 //执行update语句返回的是对象,可以通过affectedRows属性,来判断是否删除数据成功 if(results.affectedRows===1){
console.log('标记删除数据成功') }//成功 })
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/157785.html