mysql和mysql2模块的区别!!(nodejs中的模块)

mysqlmysql2 都是 Node.js 中常用的操作 MySQL 数据库的模块,它们的主要区别是在实现方式上略有不同。

  • mysql:是 Node.js 中比较早期的 MySQL 操作模块,该模块底层使用的是回调函数(callback)来实现异步操作。在处理大量并发请求时,由于回调函数的嵌套会导致代码难以维护、阅读和调试,因此在性能和可维护性上都有一定的劣势。此外, mysql 模块在连接池等方面的表现也较为一般。

  • mysql2:是 mysql 模块的替代品,该模块使用 Promise 和回调函数(callback)两种方式来实现异步操作,因此在性能和可维护性上都具有优势。此外,mysql2 模块还新增了支持多语句查询、预处理语句等功能,提供了更丰富的 API,使用起来更方便。

因此,在实际开发中,建议使用 mysql2 模块来操作 MySQL 数据库,它相对于 mysql 模块更加稳定、灵活、易用。当然,如果使用的是较老的版本,可能需要依赖 mysql 模块,但这种情况下需要自己承担潜在的风险和限制。

例如:使用mysql时:一般是这样用:而不是Promise的方式

    db.query(sql, req.params.id, (err, results) => {
        if (err) return res.cc(err)
        if (results.length !== 1) return res.cc("获取对应文章失败!")
        res.send({
            status: 0,
            message: "获取对应文章分别成功!",
            data: results[0]
        })
    })

且在相应的db文件夹下的index.js文件中应该这样写

const mysql = require("mysql")

const db = mysql.createPool({
    host: "127.0.0.1",
    user: 'root',
    password: "123456",
    database: "my_db_01"
})
//用db进行操作的

module.exports = db

而使用mysql2时,一般是通过promise的方式使用db

    try {
        const [rows, r] = await db.query(`select Id,username,id from ev_users`)
        console.log(rows)
        // console.log(r)
        res.send({
            status: 0,
            message: "获取用户列表成功!",
            data: rows
        })
    } catch (e) {
        res.send({
            status: 1,
            message: "获取用户列表数据失败!",
            desc: e.message
        })
    }

并且index.js文件一般都得这样写:注意export的是 pool.promise()!!!!!

import mysql from "mysql2"

const pool = mysql.createPool({
    host: "127.0.0.1",
    // port: 3306,
    database: "my_db_01",
    user: "root",
    password: "123456"
})

// export default pool.promise()
export default pool.promise()

如果只写pool的话,会报错:

object is not iterable (cannot read property Symbol(Symbol.iterator))

当然了像下面写不会报错,但是得到的结果却也不是我们想要的

    const rows = db.query(`select Id,username,id from ev_users`)
    console.log(rows)
    // console.log(r)
    res.send({
        status: 0,
        message: "获取用户列表成功!",
        data: rows
    })

只是将上面的[rows,r]改成了rows  变成了不迭代的形式  但是得到的结果是这个:

mysql和mysql2模块的区别!!(nodejs中的模块)_第1张图片

 

你可能感兴趣的:(mysql,数据库,nodejs,java)