04.Nodejs操作MySQL
在Nodejs中操作MySQL数据库
MySQL数据库
SQL的基本使用
1.什么是SQL
SQL(英文全称: Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
三个关键点:
- SQL是一门数据库编程语言
- 使用SQL语言编写出来的代码,叫做SQL语句
- SQL语言尽能在关系型数据库中使用(例如MySQL、Oracle、SQL Server)。非关系型数据库(例如Mongodb)不支持SQL语言
2.SQL能做什么
- 从数据库中查询数据
- 向数据库中插入新的数据
- 更新数据库中的数据
- 从数据库删除数据
- 可以创建新数据库
- 可在数据库中创建新表
- 可在数据库中创建存储过程、视图
- etc...
SELECT语句
SELECT语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集)。语法格式如下:
-- 这是注释
-- 从FROM指定的[表中],查询出所有的数据.
SELECT * FROM 表名称
-- 从FROM指定的[表中],查询出指定 列名称[字段] 的数据
SELECT 列名称 FROM 表名称
-- 注意: SQL语句中的关键字对大小写不敏感。SELECT等效于select,FROM等双于from
实例:
INSERT INTO语句
INSERT INTO语句用于向数据表中插入新的数据行,语法格式如下:
-- 语法解读:向指定的表中,插入如下几列数据,列的值通过values——指定
-- 注意:列和值要——对应,多个列和多个值之间,使用英文的逗号分隔
INSERT INTO table_name(列1,列2,.. . ) VALUES (值1,值2,....)
实例:
UPDATE语句
Update语句用于修改表中的数据。语法格式如下:
-- 语法解读:
-- 1、用 UPDATE 指定要更新哪个表中的数据
-- 2.用 SET 指定列对应的新值
-- 3,用 WHERE 指定更新的条件
UPDATE 表名称 SET 列名称=新值 WHERE 列名称=某值
实例:
DELETE语句
DELETE语句用于删除表中的行。语法格式如下:
--语法解读:
--从指定的表中,根据WHERE条件,删除对应的数据行
DELETE FROM 表名称 WHERE 列名称 = 值
实例:
WHERE子句
WHERE子句用于限定选择的标准。在SELECT、UPDATE、DELETE语句中,皆可使用WHERE子句来限定选择的标准。比如:
可在WHERE子句中使用的运算符:
操作符 | 描述 |
---|---|
= | 等于 |
<>也可以写作!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
AND与OR运算符
AND和OR可在WHERE子语句中把两个或多个条件结合起来。
AND表示必须同时满足多个条件,相当于JavaScript 中的&&运算符,例如 if (a !== 10 && a !== 20)
OR表示只要满足任意一个条件即可,相当于JavaScript 中的||运算符, 例如i if (a !== 10 || a !== 20)
实例:
ORDER BY 子句
ORDER BY语句用于根据指定的列对结果集进行排序。ORDER BY语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
实例:
COUNT(*)函数
COUNT(*)函数用于返回查询结果的总数据条数,语法格式如下:
SELECT COUNT( * ) FROM 表名称
实例:
使用AS关键字为列设置别名
实例:
在Nodejs中操作MySQL
操作步骤:
- 安装操作MySQL 数据库的第三方模块(mysql)
- 通过mysql模块连接到MySQL 数据库
- 通过mysql模块执行SQL语句
安装与配置mysql模块
- 安装mysql
mysql模块是托管于npm 上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数据库的能力。想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:
npm i mysql
- 配置相关环境
在使用mysql模块操作MySQL数据库之前,必须先对 mysql模块进行必要的配置,主要的配置步骤如下:
const databar = mysql.createPool({
host: '127.0.0.1', //数据库的IP地址
user: 'root', //登录数据库的账号
password: '', //登录数据库的密码
database: 'my_db_01' //指定要操作的数据库
})
-
测试mysql模块是否能够正常工作
调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果:
// 检测mysql模块是否正常工作
databar.query('SELECT 1',(err,results) =>{
if(err) return console.log(err.message)
//如果说能打印出[ RowDataPacket {'1' : 1} ] 的结果,就证明数据库连接正常
console.log(results)
})
mysql操作语句
查询数据
//查询users表中所有的用户数据
//模糊查询 `SELECT * FROM book where bookname like '%${搜索关键词}%'`
databar.query( 'SELECT * FROM users ', (err, results) => {
//查询失败
if (err) return console.log(err.message)
//查询成功
console.log(results)
})
// 参数一: sql语句,操作数据库的核心
// 参数二: 回调函数
// 注意:如果执行select查询语句,则执行返回的结果是数组
插入数据
向users表中新增数据,其中username为Spider-Man,password为 pcc321。示例代码如下:
// 1. 定义需要插入到表中的数据对象
const user ={username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,其中的?表示占位符
const sqlStr = 'INSERT INTO users (username,password) VALUES(?,?)'
// 3. 使用数组形式,依次为?指定具体的值
databar.query(sqlStr, [user.username,user.password],(err.results)=>{
if(err) return console.log(err.message)
console.log(results.affectedRows === 1){console.log('插入数据成功')}
})
快捷插入数据
// 1. 定义需要插入到表中的数据对象
const user ={username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,其中的?表示占位符
const sqlStr = 'INSERT INTO users SET ?'
// 3. 直接为?指定具体的值
databar.query(sqlStr, user,(err.results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1){console.log('插入数据成功')}
})
更新数据
// 1. 定义需要更新的数据对象
const user ={id:1 , username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,
const sqlStr = 'UPDATE users SET username = ? , password = ? , WHERE id = ?'
// 3. 调用databar.query()执行SQL语句的同时,依次为?指定具体的值
databar.query(sqlStr, [user.username, user.password, user.id],(err.results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1){console.log('插入数据成功')}
})
快捷更新:
// 1. 定义需要更新的数据对象
const user ={id:1 , username:'SPider-Man', password:'pcc312'}
// 2. 待执行的SQL语句,
const sqlStr = 'UPDATE users SET ? , WHERE id = ?'
// 3. 调用databar.query()执行SQL语句的同时,依次为?指定具体的值
databar.query(sqlStr, [user, user.id],(err.results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1){console.log('插入更新成功')}
})
删除数据
// 1. 待执行的SQL语句,
const sqlStr = 'DELETE FROM users WHERE id = ?'
// 2. 调用databar.query()执行SQL语句的同时,依次为?指定具体的值
//注意:如果SQL语句中有多个值,则必须使用数组为每个暂未符指定具体的值
//但如果只有一个占位符,则可以省略数组
databar.query(sqlStr, 7,(err.results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1){console.log('删除数据成功')}
})
标记删除
使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status字段标记为删除即可。
//标记删除,使用UPDATE语句替代DELETE语句;只更新数据状态,而非真正删除
//像下面代码中的sql语句的意义是,当id=?时,将其status值变更为
databar.query('UPDATA USERS SET status=1 WHERE id=?', 6,(err.results)=>{
if(err) return console.log(err.message)
if(results.affectedRows === 1){console.log('删除数据成功')}
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!