Node.js:mysql2.js的基本操作增删改查

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Node.js:mysql2.js的基本操作增删改查

文档:


https://www.npmjs.com/package/mysql2

https://www.npmjs.com/package/mysql

如果本地没有安装MySQL,可以使用免费的在线数据库替代


https://www.planetscale.com


表结构

create table table_user(
    id int primary key auto_increment, 
    name varchar(20) not null, 
    age int not null default 0
);

安装依赖


node -v
v16.14.0
pnpm i dotenv mysql2

package.json


{
  "type": "module",
  "dependencies": {
    "dotenv": "^16.0.1",
    "mysql2": "^2.3.3"
  }
}

配置文件

.env


DATABASE_URL='mysql://root:123456@127.0.0.1/data'

代码实现


// pnpm i mysql2
import mysql from 'mysql2'
export function getConnection(config) {
  const connection = mysql.createConnection(config)
  // 自定义占位符
  // https://www.npmjs.com/package/mysql#custom-format
  connection.config.queryFormat = function (query, values) {
    if (!values) return query
    return query.replace(
      /\:(\w+)/g,
      function (txt, key) {
        if (values.hasOwnProperty(key)) {
          return this.escape(values[key])
        }
        return txt
      }.bind(this)
    )
  }
  // 查询列表
  function queryAsync(sql, params) {
    return new Promise((resovle, reject) => {
      connection.query(sql, params, function (err, result, fields) {
        if (err) {
          reject(err)
        } else {
          resovle(result)
        }
      })
    })
  }
  // 查询单个对象
  async function queryOneAsync(sql, params) {
    const res = await queryAsync(sql, params)
    if (res && res.length > 0) {
      return res[0]
    } else {
      return null
    }
  }
  // 同步查询
  connection.queryAsync = queryAsync
  connection.queryOneAsync = queryOneAsync
  return connection
}

查询示例


import "dotenv/config";
// 数据插入
async function insertRow(connection) {
  let sql = "INSERT into table_user (name, age) VALUES (:name, :age)";
  let params = { name: "Tom", age: 23 };
  let result = await connection.queryAsync(sql, params);
  console.log(result);
  //   ResultSetHeader {
  //     fieldCount: 0,
  //     affectedRows: 1,
  //     insertId: 1,
  //     info: '',
  //     serverStatus: 2,
  //     warningStatus: 0
  // }
}
// 数据修改
async function updateRow(connection) {
  let sql = "UPDATE table_user SET name = :name, age = :age WHERE id = :id";
  let params = { name: "Jack", age: 24, id: 1 };
  let result = await connection.queryAsync(sql, params);
  console.log(result);
  //   ResultSetHeader {
  //     fieldCount: 0,
  //     affectedRows: 1,
  //     insertId: 0,
  //     info: 'Rows matched: 1  Changed: 1  Warnings: 0',
  //     serverStatus: 2,
  //     warningStatus: 0,
  //     changedRows: 1
  //   }
}
// 数据查询
async function selectRow(connection) {
  let sql = "SELECT * FROM table_user WHERE id = :id";
  let params = { id: 1 };
  let result = await connection.queryAsync(sql, params);
  console.log(result);
  // [ { id: 1, name: 'Jack', age: 24 } ]
}
// 数据删除
async function deleteRow(connection) {
  let sql = "delete from table_user WHERE id = :id";
  let params = { id: 1 };
  let result = await connection.queryAsync(sql, params);
  console.log(result);
  // ResultSetHeader {
  //     fieldCount: 0,
  //     affectedRows: 1,
  //     insertId: 0,
  //     info: '',
  //     serverStatus: 2,
  //     warningStatus: 0
  //   }
}
(async () => {
  const connection = getConnection(process.env.DATABASE_URL);
  // await insertRow(connection);
  // await updateRow(connection);
  // await selectRow(connection);
  await deleteRow(connection);
  // 断开连接
  connection.end();
})();


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
前端开发 JavaScript
React+Websocket简单实例
最近很多项目需要用到websocket,经过智能客服项目沉淀了一个简单的实例,以后可以直接用。有需要指教的地方可以联系我。
3529 0
|
前端开发
node express 给前端返回图片流
node express 给前端返回图片流
node express 给前端返回图片流
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
552 0
Threejs创建天空和太阳
这篇文章讲解了如何使用Three.js中的Sky组件来创建真实的天空与太阳效果,包括调整天空的颜色、太阳的位置以及实现大气散射等技巧。
528 3
|
9月前
|
数据安全/隐私保护
基于零极点配置的PID控制系统simulink建模与仿真
本课题基于零极点配置的PID控制系统在Simulink中建模与仿真,通过设置不同数量的零极点(1、3、6、8个),对比分析PID控制器的输出效果。使用MATLAB2022a版本进行建模,验证了零极点配置对系统性能的影响。PID控制器通过比例、积分和微分作用于误差信号,结合零极点配置可优化闭环系统的频率响应,提升稳定性和动态性能。
|
关系型数据库 MySQL Java
MySQL支持哪些编程语言?
MySQL支持哪些编程语言?
525 1
|
存储 监控 测试技术
交换机性能指标全解析:选择最佳交换机的实用指南
【8月更文挑战第22天】交换机是网络的核心组件,选型关乎网络性能与稳定性。主要考量包括端口数量与速度、背板带宽、转发率、MAC地址表大小、管理功能、QoS支持、冗余电源、堆叠能力和PoE支持等。购买时应根据网络规模与预算选择知名品牌和型号,考虑端口配置、管理特性、安全性和扩展性,并进行性能测试与兼容性验证。
1319 1
|
Java Linux Android开发
Android系统的启动流程
Android系统的启动流程
224 1
|
存储
红帽RHCE之超级详细的磁盘分区方案
红帽RHCE之超级详细的磁盘分区方案
544 0
红帽RHCE之超级详细的磁盘分区方案
|
存储 安全 网络安全
okcc呼叫中心系统如何实现客户号码脱敏?
OKCC系统实现号码脱敏的关键步骤包括: 数据加密:使用加密算法对客户号码进行存储加密。 数据脱敏展示:在系统界面上用星号或其他字符替换号码的部分或全部数字。 权限控制:限制对敏感号码数据的访问权限,仅授权人员可查看。 审计日志:记录所有敏感信息的访问和操作日志,以便追踪。 安全审核:定期进行安全检查和渗透测试,确保脱敏措施有效。