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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 【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;
相关文章
|
10月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
8月前
|
SQL 关系型数据库 MySQL
MySQL锁机制:并发控制与事务隔离
本文深入解析了MySQL的锁机制与事务隔离级别,涵盖锁类型、兼容性、死锁处理及性能优化策略,助你掌握高并发场景下的数据库并发控制核心技巧。
|
9月前
|
存储 监控 Oracle
MySQL事务
MySQL事务具有ACID特性,包括原子性、一致性、隔离性和持久性。其默认隔离级别为可重复读,通过MVCC和间隙锁解决幻读问题,确保事务间数据的一致性和并发性。
MySQL事务
|
7月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
432 0
|
8月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
284 0
|
10月前
|
安全 关系型数据库 MySQL
mysql事务隔离级别
事务隔离级别用于解决脏读、不可重复读和幻读问题。不同级别在安全与性能间权衡,如SERIALIZABLE最安全但性能差,READ_UNCOMMITTED性能高但易导致数据不一致。了解各级别特性有助于合理选择以平衡并发性与数据一致性需求。
297 1
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
5711 56
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
908 7
MySQL事务日志-Undo Log工作原理分析

推荐镜像

更多