Express学习笔记(五)——在项目中操作 MySQL

目录

1. 数据库准备

2. 在项目中操作数据库的步骤

3. 安装与配置 mysql 模块

3.1 安装 mysql 模块

3.2 配置 mysql 模块

3.3 测试 mysql 模块能否正常工作

4. 使用 mysql 模块操作 MySQL 数据库

4.1 查询数据

4.2 插入数据

4.3 插入数据的便捷方式

4.4 更新数据

4.5 更新数据的便捷方式

4.6 删除数据

4.7 标记删除


1. 数据库准备

# 创建数据库 expressdatabase
create database expressdatabase;

# 查看所有数据库
show databases ;

# 切换数据库
use expressdatabase;

# 查看当前数据库
select database() ;

# 创建 users 用户信息表
create table users (
    id int primary key not null unique auto_increment comment '用户ID,这是用户信息的唯一标识',
    username varchar(45)  not null unique comment '用户的登录名',
    password varchar(45) not null comment '用户的登录密码',
    status tinyint(1) not null default 0 comment '用户的状态,是一个布尔值。0表示用户状态正常,1表示用户被禁用。'
) comment '用户信息表';

# 插入数据
insert into users(username, password) values ('张三', '123456'), ('李四', 'abc123');
insert into users(username, password) values  ('小红', '654321');

2. 在项目中操作数据库的步骤

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

3. 安装与配置 mysql 模块

3.1 安装 mysql 模块

mysql 模块是托管于 npm 上的 第三方模块 。它提供了在 Node.js 项目中 连接 操作 MySQL 数据库的能力。
想要在项目中使用它,需要先运行如下命令,将 mysql 安装为项目的依赖包:
npm install mysql

3.2 配置 mysql 模块

在使用 mysql 模块操作 MySQL 数据库之前, 必须先对 mysql 模块进行必要的配置 ,主要的配置步骤如下:
// 1. 导入 mysql 模块
const mysql = require('mysql')

// 2. 建立与 mysql 数据库的连接关系
const database = mysql.createPool({
  host: '127.0.0.1', //数据库的 ip 地址
  user: 'root', // 登录数据库的账号
  password: '123456', // 登录数据库的密码
  database: 'expressdatabase', // 指定要操作哪个数据
})

3.3 测试 mysql 模块能否正常工作

调用 database.query() 函数,指定要执行的 SQL 语句,通过回调函数拿到执行的结果:
// 检测 mysql 模块能否正常工作
database.query('select 1', (err, results) => {
  // mysql 模块工作期间报错了
  if (err) {
    return console.log(err.message)
  }
  // 能够成功的执行 sql 语句
  console.log(results)
})

输出下述结果,则代表数据库连接正常:

运行代码后报以下错误:

ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client undefined

错误原因:

  • 这个错误表明客户端不支持服务器所要求的认证协议。在 MySQL 8.0 版本之后,默认的认证插件从 mysql_native_password 变成了 caching_sha2_password。而一些旧版本的 MySQL 客户端可能只支持 mysql_native_password 认证方式,当客户端尝试连接使用新认证方式的 MySQL 服务器时,就会出现此错误。

解决方案三种:

① 更新 MySQL 客户端

  • 将 MySQL 客户端更新到支持 caching_sha2_password 认证协议的版本。

② 修改 MySQL 服务器的认证方式

  • 使用管理员账户登录 MySQL。
  • 执行以下 SQL 语句来修改用户的认证方式:
ALTER USER 'your_username'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password';

把 your_username 替换成你的用户名,your_host 替换成主机名(通常是 localhost),your_password 替换成你的密码。

  • 执行以下语句来刷新权限:
FLUSH PRIVILEGES;

③ 在连接配置中指定认证方式

// 1. 导入 mysql 模块
const mysql = require('mysql');

// 2. 建立与 mysql 数据库的连接关系
const database = mysql.createPool({
  host: '127.0.0.1', // 数据库的 ip 地址
  user: 'root', // 登录数据库的账号
  password: '123456', // 登录数据库的密码
  database: 'expressdatabase', // 指定要操作哪个数据
  authPlugin: 'mysql_native_password' // 指定认证方式
});

4. 使用 mysql 模块操作 MySQL 数据库

4.1 查询数据

查询 users 表中所有的数据:
// 查询 users 表中所有的数据
const sqlStr = 'select * from users'
database.query(sqlStr, (err, results) => {
  // 查询数据失败
  if (err) {
    console.log(err.message)
  }
  // 查询数据成功
  // 注意:如果执行的是 select 查询语句,则执行的结果是数组
  console.log(results)
})

4.2 插入数据

向 users 表中新增数据, 其中 username Spider-Man password pcc321 。示例代码如下:
/ 向 users 表中,新增一条数据,其中 username 的值为 Spider-Man,password 的值为 pcc123
const user = {
  username: 'Spider-Man',
  password: 'pcc123'
}

// 定义执行的 sql 语句
const sql = 'insert into users(username, password) values (?, ?)'

// 执行 sql 语句
database.query(sql, [user.username, user.password], (err, results) => {
  // 执行 sql 语句失败了
  if (err) {
    console.log(err.message)
  }
  // 执行成功了
  // 注意: 如果执行的是 insert into 插入语句,则 results 是一个对象
  // 可以通过 affectedRows 属性,来判断是否插入数据成功
  if (results.affectedRows === 1) {
    console.log('插入数据成功。')
  }
})

4.3 插入数据的便捷方式

向表中新增数据时,如果 数据对象的每个属性 数据表的字段 一一对应 ,则可以通过如下方式快速插入数据:
  • 英文的问号(?)表示占位符
// 演示插入数据的快捷方式
const user2 = {
  username: 'Spider-Man2',
  password: 'pcc4321'
}

// 定义执行的 sql 语句
const sql = 'insert into users set ?'

// 执行 sql 语句
database.query(sql, user2, (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if(results.affectedRows === 1 ) {
    console.log('插入数据成功。')
  }
})

4.4 更新数据

可以通过如下方式,更新表中的数据:
// 更新 id = 6 的用户信息
const user = {
  id: 6,
  username: 'aaa',
  password: '000'
}
// 定义 sql 语句
const sql = 'update users set username = ?, password = ? where id = ?'

// 执行 sql 语句
database.query(sql, [user.username, user.password, user.id], (err, rusults) => {
  if (err) {
    return console.log(err.message)
  }
  // 注意:执行了 update 语句之后,执行的结果,也是一个对象,可以通过 affectedRows 判断是否更新成功
  if (rusults.affectedRows === 1) {
    console.log('更新成功。')
  }
})

4.5 更新数据的便捷方式

更新表数据时,如果 数据对象的每个属性 数据表的字段 一一对应 ,则可以通过如下方式快速更新表数据:
// 演示更新用户信息的快捷方式
const user = {
  id: 6,
  username: 'bbb',
  password: '111'
}
// 定义 sql 语句
const sql = 'update users set ? where id = ?'

database.query(sql, [user, user.id], (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('更新数据成功。')
  }
})

4.6 删除数据

在删除数据时,推荐根据 id 这样的唯一标识,来删除对应的数据。示例如下:
// 1. 删除 id 为 5 的用户
const sql = 'delete from users where id = 5'
// 2. 调用 query 方法执行 sql 语句的同时,为占位符指定具体的值
// 注意:如果 sql 语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
//  如果 sql 语句中只有一个占位符,则可以省略数组
database.query(sql , 5, (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  // 注意:执行 delete 语句之后,结果也是一个对象,也包含 affecedRows 属性
  if (results.affectedRows === 1) {
    console.log('删除用户信息成功。')
  }
})

4.7 标记删除

  • 使用 DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作
  • 所谓的标记删除,就是在表中设置类似于 status 这样的状态字段,来标记当前这条数据是否被删除。
  • 当用户执行了删除的动作时,我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应的 status 字段标记为删除即可。
// 标记删除
const sql = 'update users set status = ? where id = ?'
database.query(sql, [1, 6], (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('标记删除成功。')
  }
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值