【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) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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 分组查询