【node】express中mysql的基本用法、连接池的使用、事务的回滚

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【node】express中mysql的基本用法、连接池的使用、事务的回滚

安装mysql包


npm install mysql --save

mysql的配置信息


//  数据库配置文件
var mysql = require('mysql');
const config = {
    host : 'localhost',
    database : 'wish',
    username : 'root',
    password : '123'
}
var connection = mysql.createConnection({
    host: config.host, //数据库地址
    user: config.username,//用户名
    password: config.password,//密码
    database: config.database,//数据库名称
    timezone:'+08:00'
});
module.exports = connection;

mysql基本操作


mysql的基本操作即为:读、写两个操作。读操作用SELECT关键字查询出结果之后,返回给html页面渲染数据。写操作是html页面的< form>标签提交的数据,写入mysql数据库。

查询mysql并渲染数据


// 设置‘/’的路由
router.get('/',function getList(req,res){
    var sql = 'SELECT * FROM wish';
    Connection.query(sql, function(err, result) {
      if (err) {
          console.log('[SELECT 错误]:', Constant.DEFAULT_ERROR);
      }
      // 为index页面的data变量,赋值为查询结果result
      // 之后前端会渲染数据
      res.render('index',{
          data:result
      })
    })
});

mysql插入操作


插入操作需要借助< form >标签,提示点击提交之后,会跳转到另外一个页面,还是没有ajax方便。

首先在html页面写上< form >标签


<form action="add" method="post" id="form">
  <input name="name">
  <input name="content">
  <button type="submit">提交</button>
</form> 

点击submit按钮之后,提交的路由就是‘/add’,在服务器端获取的request.body中会包含name、content参数值。

开始插入


router.post('/add',function add(req,res){
    if(req.body.name==''&&req.body.content==''){
        console.log('不可为空');
    }
    var sql = `INSERT INTO wish VALUES('112','${req.body.name}','${req.body.content}','1','')`;
    Connection.query(sql, function(err, result) {
        if (err) {
            console.log('[SELECT 错误]:', Constant.DEFAULT_ERROR);
        } 
        //这里理因写个跳转页面
    })
});

mysql连接池


为什么要采用数据库连接池


此处引用了知乎用户:Drol的回答

应用程序和数据库建立连接的过程是这样的:

1、首先通过TCP协议的三次握手和数据库服务器建立连接,然后发送数据库用户账号密码,等待数据库验证用户身份。


2、 完成用户身份验证后,系统才可以提交SQL语句到数据库执行。


3、 好了这个时候假设我们不使用数据库连接池,那么完成一次SQL查询后,我们还要把连接关闭,关闭连接就需要和数据库通信告诉它我们要断开连接了然后再TCP四次挥手最后完成关闭。


这个过程中每一次发起SQL查询所经历的TCP建立连接,数据库验证用户身份,数据库用户登出,TCP断开连接消耗的等待时间都是可以避免的,这明显是一种浪费。打个比方,你去网吧去玩游戏,每次去到呢先插网线,然后开机登录游戏,玩了一会儿要去上厕所,你就退出游戏,然后关机拔网线。去完厕所回来就又重新插网线开机登游戏。


有没有觉得上面例子中的行为很扯蛋,所以每次SQL查询都创建链接,查询完后又关闭连接这个做法本身就很扯蛋。合理的做法就应该是系统启动的时候就创建数据库连接,然后需要使用SQL查询的时候,就从系统拿出数据库连接对象并提交查询,查询完了就把连接对象还给系统。系统在整个程序运行结束的时候再把数据库连接关闭。考虑到一般数据库应用都是Web多用户并发应用,那么只有一个数据库连接对象肯定不够用,所以系统启动的时候就应该多创建几个数据库连接对象供多个线程使用,这一批数据库连接对象集合在一起就被称之为数据库连接池。


数据库连接池就是典型的用空间换时间的思想,系统启动预先创建多个数据库连接对象虽然会占用一定的内存空间,但是可以省去后面每次SQL查询时创建连接和关闭连接消耗的时间。

以空间换空间,避免多次TCP/IP的三次握手与四次挥手。

node中mysql数据库连接池的写法


var mysql = require('mysql');
var pool = mysql.createPool({
  host : "hostName",
  user : "username",
  password: "password"
});
pool.getConnection(function(err, connection){
  connection.query( "select * from table1", function(err, rows){
    if(err) {
      throw err;
    }else{
      console.log( rows );
    }
  });
  connection.release();
});

mysql事务


事务的应用场景主要针对多条SQL语句同时操作,其中某一条语句发生错误,那么数据库应回到之前所有语句还未操作的状态。成为事务的回滚。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
3天前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
21天前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
25天前
|
SQL 关系型数据库 MySQL
mysql数据误删后的数据回滚
【11月更文挑战第1天】本文介绍了四种恢复误删数据的方法:1. 使用事务回滚,通过 `pymysql` 库在 Python 中实现;2. 使用备份恢复,通过 `mysqldump` 命令备份和恢复数据;3. 使用二进制日志恢复,通过 `mysqlbinlog` 工具恢复特定位置的事件;4. 使用延迟复制从副本恢复,通过停止和重启从库复制来恢复数据。每种方法都有详细的步骤和示例代码。
117 2
|
28天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
46 1
|
1月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
16天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
31 0
|
16天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
17天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
24 0
|
1月前
|
SQL JavaScript 关系型数据库
Node.js 连接 MySQL
10月更文挑战第9天
20 0
下一篇
无影云桌面