node连接MySQL数据库的3种方式总结

目录
  • 1.使用mysql包的提供的接口进行连接
  • 2.建立数据库连接池
  • 总结

以下我们将说明node连接数据库的三种方式,并进行利弊说明,以挑选出最适合项目的连接方式。

1.使用mysql包的提供的接口进行连接

例如:

connection.query('SELECT * FROM users WHERE id = ?', ['123'], function(err, rows) {
    if (err) {
        // error
    } else {
        for (let row in rows) {
            processRow(row);
        }
    }
});

这种方法较为底层,且每次操作数据库都需要新建数据库连接,若数据库操作需求多,对服务器消耗较大,因此,可以使用第二种连接方式。

2.建立数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。

通俗的理解就是: 数据库连接池是程序启动时建立足够数量的数据库连接对象,并将这些连接对象组成一个池,由程序动态的对池中的连接对象进行申请、使用和释放。

优点

1.避免应用程序频繁的连接、断开数据库

2.提供数据库连接对象的使用频率。

创建方式

1.创建连接池

mysql.createPool(config) 
    host:数据库服务器的地址
    port: 端口号
    user:连接数据库的用户名
    password:连接数据库的密码
    database:数据库名
    connectionLimit:用于指定连接池中最大的链接数,默认属性值为10.
    multipleStatements :是否允许执行多条sql语句,默认值为false

2.从连接池获取一个连接

连接池名.getConnection(function(err,connection){
    执行的代码
})

//参数err:错误对象。连接失败后的错误信息
//参数connection:连接对象。若连接失败,它就是undefined

3.释放连接对象(将连接对象放回连接池): connection.release()

4.从连接池中移除连接对象: connection.destory()

5.关闭该连接池: 连接池名.end();

3.数据库访问中的ORM——sequelize模块 ORM

考虑到数据库表是一个二维表,包含多行多列,每一行可以用一个JavaScript对象表示。这就是传说中的ORM技术:Object-Relational Mapping(对象关系映射),把关系数据库的表结构映射到对象上。

ORM的特点:

  • 可以提高开发的效率
  • 不用直接写SQL语句 sequelize

基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect)。它当前支持MySQL、MariaDB、SQLite、PostgreSQL、Sql Server 数据库。

sequelize的特点:

强大的模型定义,支持虚拟类型。
支持完善的数据验证,减轻前后端的验证压力。
Sequelize的查询非常全面和灵活。

sequelize的使用

  • 安装sequelize:npm install sequelize 必须先安装mysql的驱动模块(npm install mysql)
  • 连接数据库:创建sequelize的对象
//导入mysql模块
const mysql = require('mysql2');
//导入sequelize模块
const Sequelize = require('sequelize');
//创建sequelize对象,参数分别为:数据库名称,数据库类型,密码,配置
var MySequelize = new Sequelize('spj','root','929TJ813',{
    host:'localhost',
    port:3306,
    dialect:'mysql',   //数据库类型
    pool:{  //数据库连接池
        max:20,  //最大连接对象的个数
        min:5,  //最小连接对象的个数
        idle:1000  //最长等待时间,单位为毫秒
    }
})
module.exports = MySequelize ;   //导出创建的sequelize对象

创建数据模型:数据模型是一个类,对应的是数据库中一张表

const Sequelize =require('sequelize')
const MySequesize = require('../config/dbconfig');  //导入创建的sequelize对象
//创建StudentModel模型,该模型对应的表名是student
var StudentModel = MySequesize.define('users',{
    sid:{
        type:Sequelize.INTEGER,  //表示属性的数据类型
        field:'s_id',   //属性对应的列名,若不定义field则表中的列名(sid)就是属性名
        primaryKey:true,  //表示主键
        autoIncrement:true  //表示主键自增
    },
    sname:{
        type:Sequelize.STRING(50),
        field: 's_name',
        allowNull:false,   //表示当前列是否允许为空,false表示该列不能为空
        //unique:true    //表示该列的值必须唯一
    },
    sgender:{
        type:Sequelize.STRING(4),
        field:'s_gender',
        allowNull: false
    },
    sbirthday:{
        type:Sequelize.DATE,
        field:'s_birthday',
        allowNull:false
    },
    saddress:{
        type:Sequelize.STRING(100),
        field:'s_address',
        allowNull:false
    },
    sage:{
        type:Sequelize.INTEGER,
        field:'s_age',
        allowNull:false
    }
},{
    freezeTableName:true, //true表示使用给定的表名,false表示模型名后加s作为表名
    timestamps:false  //true表示给模型加上时间戳属性(createAt、updateAt),false表示不带时间戳属性
})
//同步数据库,force的值为false,表若存在则先删除后创建,force的值为true表示表若存在则不创建
var users = StudentModel.sync({force:false});

module.exports = StudentModel;   //导出模型

使用sequelize实现增删改查 。

const StudentModel = require('../../db/model/StudentModel');
const Sequelize = require('sequelize')
//插入数据
StudentModel.create({
    sname:'关羽',
    sgender:'男',
    sbirthday:'1998-12-28',
    saddress:'陕西宝鸡'
}).then(result=>{
    console.log("插入成功!",result);
}).catch(err=>{
    console.log("插入失败!",err);
})

//查询数据
StudentModel.findAll({
    raw:true   //查询出来只有需要的数据,没有别的内容
}).then(data=>{
    console.log(data);
})

//删除记录
StudentModel.destroy({
    where:{
        sid:2
    }
}).then(result=>{
    console.log("删除成功!",result)
}).catch(err=>{
    console.log("删除失败!",err);
})

//更新记录
StudentModel.findOne({
    where:{
        sid:3
    }
}).then(users=>{
    users.update({
        sname:'张飞',
        sgender:'男'
    }).then(result=>{
        console.log("更新成功!",result)
    }).catch(err=>{
        console.log("更新失败!",err);
    })
}).catch(error=>{
    console.log("查无此人!",error);
})

//查询部分字段
StudentModel.findAll({
    attributes:['sname','saddress'],
    raw:true
}).then(result=>{
    console.log(result);
}).catch(err=>{
    console.log(err);
})

//聚合函数
StudentModel.findAll({
    attributes:[[Sequelize.fn('COUNT',Sequelize.col('s_id')),"记录总数"]],  //col里面必须放的是列名
    raw:true
}).then(result=>{
    console.log(result)
})

使用sequelize实现模糊查询等内容。

const StudentModel = require('../../db/model/StudentModel');
const Op = require('sequelize').Op;   //引入sequelize模块的Op操作符

//模糊查询
StudentModel.findAll({
    where:{
        sname:{
            [Op.like]:'张%'
        }
    },
    raw:true
}).then(result=>{
    console.log(result);
})

//between:查询年龄在12到18之间的人的信息
StudentModel.findAll({
    where:{
        sage:{
            [Op.between]:[12,18]
        }
    },
    raw:true
}).then(result=>{
    console.log(result);
})

//in:查询地址是'陕西西安‘和'陕西商洛‘的记录
StudentModel.findAll({
    where:{
        saddress:{
            [Op.in]:['陕西西安','陕西商洛']
        }
    },
    order:[
      ['sage','desc']   //查询结果按照sage的降序排列
    ],
    raw:true
}).then(result=>{
    console.log(result);
})

//and和or:查询性别为'男‘,并且地址是‘陕西宝鸡'的记录
StudentModel.findAll({
    where:{
        [Op.and]:[   //把and改为or即为或时间
            {
                sgender:{
                    [Op.eq]:'男'
                }
            },
            {
                saddress:{
                    [Op.eq]:'陕西宝鸡'
                }
            }
        ]
    },
    raw:true
}).then(result=>{
    console.log(result);
})

//limit和offset:分页查询
StudentModel.findAll({
    limit:3,   //查询的记录数
    offset:1,  //从索引值为几的记录开始查询(查询的起始位置),所有数据的索引值从0开始
    raw:true
}).then(result=>{
    console.log(result);
})

参考链接:https://www.jb51.net/article/258390.htm

总结

到此这篇关于node连接MySQL数据库的3种方式的文章就介绍到这了,更多相关node连接MySQL内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Node服务端实战之操作数据库示例详解

    目录 连接数据库 insert语句 简化新增sql update语句 delete语句 连接数据库 本系列是使用node作为服务器开发的操作过程记录,记录一下主要的内容并且整理过程的脉络,以初学者的方式将学习内容记录下来,从0到1逐步的学习node,教程使用过程中用到的是基于express的node框架. const mysql = require('mysql') const db = mysql.createPool({ host: 'localhost', user: 'root', pa

  • node基于express框架操作Mysql数据库的步骤

    目录 一.在express项目中操作数据库的步骤 1.安装mysql模块 2.配置mysql模块 3.测试mysql模块能否正常工作 4.查询数据库数据 5.向数据库插入数据 6.更新数据库数据 7.更新数据库数据 8.删除数据库信息的标记删除 一.在express项目中操作数据库的步骤 ①安装操作 MySQL 数据库的第三方模块(mysql) ②通过mysql模块连接到MySQL 数据库 ③通过 mysql模块执行SQL语句 1.安装mysql模块 mysql模块是托管于npm 上的第三方模块

  • Node.js连接数据库实现过程详解

    目录 创建数据库 mysql 创建数据库 在前面的数据库入门中我们讲解了常用的sql语法以及实战,接下来我们来介绍一下如何在nodejs中使用数据库 在前面的文章中我们有手把手使用docker创建数据库,这里就直接沿用之前创建的数据库 首先启动docker,把之前的mysql容器运行起来 然后登入mysql客户端查看一下现有的数据库,以及user表 mysql 在前面我们已经使用mysql自带的客户端连接数据库进行一些操作, 到了node.js中我们可以用mysql这个npm包来连接mysql数

  • nodejs中关于mysql数据库的操作

    目录 基本概念 为什么要有数据库 什么是数据库 数据库的分类 数据库中基本术语 数据库的可视化操作(创建数据库.创建表) 数据类型(部分) 数据库的常见命令 数据库相关 表相关 插入数据 修改数据 删除数据 查询数据 条件查询 导入和导出数据库脚本 node操作mysql 基本使用 查询语句 插入语句 修改语句 删除语句 db模块封装 基本概念 为什么要有数据库 没有数据库,我们的数据都是存储在文件当中的,那么文件存储数据的缺点有: 文件的安全性问题. 文件不利于查询和对数据的管理. 文件不利于

  • Vue项目通过node连接MySQL数据库并实现增删改查操作的过程详解

    目录 Vue项目通过node连接MySQL数据库 1.创建Vue项目 2.下载安装需要的插件 3.在项目中创建server文件夹,用于搭建本地服务器 4.Vue项目访问接口获取数据 数据表的增删改查操作 1.服务器配置 2.前端配置 页面样式 总结 Vue项目通过node连接MySQL数据库 1.创建Vue项目 vue create 项目名 Vue项目创建的详细步骤,有需要的可移步这里 2.下载安装需要的插件 下载express npm install express 下载cors,用于处理接口

  • node连接MySQL数据库的3种方式总结

    目录 1.使用mysql包的提供的接口进行连接 2.建立数据库连接池 总结 以下我们将说明node连接数据库的三种方式,并进行利弊说明,以挑选出最适合项目的连接方式. 1.使用mysql包的提供的接口进行连接 例如: connection.query('SELECT * FROM users WHERE id = ?', ['123'], function(err, rows) { if (err) { // error } else { for (let row in rows) { proc

  • PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】

    本文实例讲述了PHP连接MySQL数据库的三种方式.分享给大家供大家参考,具体如下: PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案. PHP的MySQL扩展是设计开发允许php应用与MySQL数据库交互的早期扩展.MySQL扩展提供了一个面向过程的接口,并且是针对MySQL4.1.3或者更早版本设计的.因此这个扩展虽然可以与MySQL4.1.3或更

  • 详解java连接mysql数据库的五种方式

    第一种方式:将用户名和密码封装在Properties类中 首先,导入数据库连接包这个是毋庸置疑的.创建一个jdbc驱动dirver.将数据库(以MySQL为例)的url保存在所创建的字符串url中.如果mysql版本低于8.0,则url保存形式应该为: String url = "jdbc:mysql://localhost:3306/test" 如果mysql版本为8.0版本或以上,url保存形式为: String url = "jdbc:mysql://localhost

  • 一文详解PHP连接MySQL数据库的三种方式

    目录 1.MySQL扩展 2.mysqli扩展 3.PDO扩展 知识点补充 PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO). 1.MySQL扩展 PHP 的 MySQL 扩展是设计开发允许 PHP 应用与 MySQL 数据库交互的早期扩展.MySQL 扩展提供了一个面向过程的接口,由于不支持后期MySQL服务端提供的一些特性.且太古老,又不安全,所以已被后来的 mysqli 完全取代: 使用方式如下 //自 PHP

  • c++连接mysql数据库的两种方法(ADO连接和mysql api连接)

    第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的SQL语句不太兼容标准SQL语句,需要做一些处理,这里暂时不说.第二种方法只能针对于mysql数据库的连接,不过用这种方法不用安装MyODBC服务器程序. 不管用哪种方法,首先需要安装Mysql数据库,安装方法请看"mysql安装及一些注意点".最好安装一个Navicat for mysql,方便操作mysql数

  • Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】

    本文实例讲述了Python操作MySQL数据库的两种方式.分享给大家供大家参考,具体如下: 第一种 使用pymysql 代码如下: import pymysql #打开数据库连接 db=pymysql.connect(host='1.1.1.1',port=3306,user='root',passwd='123123',db='test',charset='utf8') cursor=db.cursor()#使用cursor()方法获取操作游标 sql = "select * from tes

  • C++连接mysql数据库的两种方法小结

    现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法.可以通过2种方法实现. 第一种方法是利用ADO连接, 第二种方法是利用mysql自己的api函数进行连接. 第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的

  • node连接mysql数据库遇到的问题和解决方案

    今天安装了新版的MySQL(8.0.21),用node框架连接数据库的时候报了个错: Client does not support authentication protocol requested by server; consider upgrading MySQL client 原因在于MySQL8.0换了加密插件,而数据库管理客户端还是原来旧版本的加密方式,主要在于安装MySQL8.0过程中的Authentication Method这一配置过程,有了不同的加密方式,所以如果选择强加密

  • 详解Ubuntu Server下启动/停止/重启MySQL数据库的三种方式

    Ubuntu Server下启动/停止/重启MySQL数据库的三种方式 系统环境:ubuntu server 12.10 x64(mysql为系统自带) 当我们需要修​​改MySQL的配置文件my.cnf(windows 下为 my.ini)来进行一些设置的时候,修改完之后我们需要重启MySQL. my.cnf文件位置为:/ect/mysql/my.cnf Waring:如果该文件配置错误,MySQL将无法启动. 下面介绍三种方式对MySQL进行启动/停止/重启操作: 启动mysql: 方式一:

  • JDBC连接Access数据库的几种方式介绍

    接下来总结一下常用的几种连接方式. 例如有如下的Access数据库student,表basic,以及6条记录,现在通过几种方式在Jsp中将他们的数据显示出来.如图所示: 对于几种连接Access数据库的方式,基本上都是基于JDBC-ODBC方式的,当然也有纯JDBC驱动的方式.这里我暂时就不说了.对于这几种方式,除了取得连接之处不同外,其他的代码都是一样的.所以这里先写出取得连接的几种方式,然后再用完整的代码进行显示. 方式一:通过JDBC-ODBC方式桥连直接连接: 1.对于这种方式,首先要建

随机推荐