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

简介: 【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语句同时操作,其中某一条语句发生错误,那么数据库应回到之前所有语句还未操作的状态。成为事务的回滚。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
Prometheus 监控 JavaScript
Node.js连接池配置的五个隐形陷阱与防御体系:从创业公司血泪史说起
文章以创业公司血泪史为例,详细阐述了 Node.js 连接池配置的五个隐形陷阱及防御体系。包括连接泄漏、配置参数算术错误、异步异常导致崩溃、跨连接事务问题、监控缺失,并介绍了相应的解决办法和终极防御手段,强调在确定性与不确定性中寻找平衡,建立自适应机制。
673 13
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
475 19
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
1114 1
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
541 1
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
398 0

推荐镜像

更多