【NodeJS】操作MySQL

 

1、在连接的数据库中准备测试操作的表:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
  
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (1, 'Jone', 18, 'test1@baomidou.com');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (2, 'Jack', 20, 'test2@baomidou.com');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (3, 'Tom', 28, 'test3@baomidou.com');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (4, 'Sandy', 21, 'test4@baomidou.com');
INSERT INTO `test`.`user`(`id`, `name`, `age`, `email`) VALUES (5, 'Billie', 24, 'test5@baomidou.com');

 

2、开发的JS文件所在目录安装MySQL模块

npm install mysql

 

3、编写JS文件,引入模块并创建连接池

1
2
3
4
5
6
7
8
9
10
11
// mysql模块导入
const MYSQL = require('mysql')
 
// 创建连接池,入参连接配置参数
const db = MYSQL.createPool({
  host: '127.0.0.1',
  port: 3308,
  user: 'root',
  password: '123456',
  database: 'test',
})

  

4、查询操作

1
2
3
4
5
6
// 查询操作
const SQL_STATEMENT = 'SELECT * FROM user;'
db.query(SQL_STATEMENT, (error, resultset)  => {<br>  // SQL执行异常或者连接异常,将返回error异常对象
  if (error) return console.log(JSON.stringify(error))<br> // 如果SQL执行正常将返回结果集对象 [row1, row2, row3, ...]
  console.log(resultset)
})

 

5、新增操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 新增操作: 默认是开启了自动提交的
const user = {
  name: 'cloud9',
  age: 22,
  email: '1791255334@qq.com'
}
// 占位符传参 , 操作的结果通过结果集对象的affectedRows属性来返回
const SQL = 'INSERT INTO `test`.`user` VALUES(NULL, ?, ?, ?);'
db.query(SQL, [user.name, user.age, user.email], (error, results) => {
  if (error) return console.log(error)
  console.log(results.affectedRows + ' 插入操作')
})
 
// 支持按对象方式直接插入
const SQL = 'INSERT INTO `test`.`user` SET ?'
db.query(SQL, user, (error, results) => {
  if (error) return console.log(error)
  console.log(results.affectedRows + ' 插入操作')
})

  

6、更新操作,和新增基本是一致的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const user = {
  name: 'cloud9',
  age: 22,
  email: '1791255334@qq.com'
}
 
// 同理UPDATE语句也可以
const UPDATE_SQL = 'UPDATE `test`.`user` SET name = ?, age = ? WHERE id = 1 '
db.query(UPDATE_SQL, [user.name, user.age], (error, results) => {
  if (error) return console.log(error)
  console.log(results.affectedRows + ' 插入操作')
})
 
// 对象支持
const UPDATE_SQL = 'UPDATE `test`.`user` SET ? '
db.query(UPDATE_SQL, user, (error, results) => {
  if (error) return console.log(error)
  console.log(results.affectedRows + ' 插入操作')
}

  

7、新增,更新,删除,基本同理,不多赘述

8、连接池资源释放:

1
2
// 关闭连接池资源
db.end()

 

 使用ES8的 Async Await语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
 * 安装mysql2模块
 * npm install mysql2
 */
import mysql from 'mysql2'
 
// 连接配置
const connectorConfig = {
  host: '127.0.0.1',
  port: 3308,
  user: 'root',
  password: '123456',
  database: 'my-info'
}
 
// promise包装处理?
const connectPool = mysql.createPool(connectorConfig).promise()
 
/**
 * 使用ES8 Async & Await
 */
async function pageQuery(pageIndex, pageSize) {
   
  const QUERY_SQL = 'SELECT * FROM `english-words` LIMIT ?, ?'
 
  /**
   * JS数组也能解构,直接声明一个任意变量名称,
   * 获取数组第一个元素返回给此变量,
   * 以此类推
   */
  const [resultSet, columnDefines] = await connectPool.query(QUERY_SQL, [ parseInt( (1 - pageIndex) * pageSize), pageSize])
  console.log(resultSet)
  // console.log(columnDefines)
 
 
  // 不能放在外面释放,因为是一个异步任务
  connectPool.end()
}
 
// 调用
pageQuery(1, 5)

  

  

 

posted @   emdzz  阅读(125)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2020-04-27 【DataBase】MySQL 14 连接查询其一 SQL92标准 内连接
2020-04-27 【DataBase】MySQL 13 分组查询
点击右上角即可分享
微信分享提示