Nodejs使用mysql2操作数据库【完整讲解】

这篇具有很好参考价值的文章主要介绍了Nodejs使用mysql2操作数据库【完整讲解】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mysql2 相比于 mysql 的优势

mysql2 是一个基于 Node.js 的 MySQL 客户端库,相比于 mysql 库,它具有以下几个优势:

  1. 性能更好:mysql2 库在性能方面进行了优化,使用了更高效的底层实现。它使用了更快的连接池管理和查询执行机制,可以处理更高的并发请求,提供更好的性能表现。

  2. 支持 Promise 和 async/await:mysql2 库原生支持 Promise 和 async/await,使得编写异步代码更加方便和直观。您可以使用 promise().query() 方法执行查询,并使用 await 关键字等待查询结果。

  3. 支持流式查询:mysql2 库支持流式查询,可以通过创建可读流来处理大型查询结果集。这对于处理大量数据或需要逐行处理结果的情况非常有用,可以减少内存占用并提高性能。

  4. 更好的错误处理:mysql2 库提供了更好的错误处理机制,可以更详细地捕获和处理数据库操作中的错误。它返回的错误对象包含更多有用的信息,如 SQL 语句、错误代码和错误堆栈等,有助于更好地调试和排查问题。

  5. 支持预处理语句:mysql2 库支持预处理语句,可以使用占位符来安全地构建和执行 SQL 查询。这可以防止 SQL 注入攻击,并提高应用程序的安全性。

安装

npm install mysql2

连接数据库

要使用 mysql2 连接到 MySQL 数据库,您需要安装 mysql2 包,并使用适当的连接参数来创建连接。以下是一个示例,展示了如何使用 mysql2 连接到 MySQL 数据库:

const mysql = require("mysql2");

// 创建数据库连接
const connection = mysql.createConnection({
  host: "localhost", // 主机地址
  user: "root", // 用户名
  password: "password", // 密码
  port: 3306, // 端口号,默认为 3306
  database: "mydatabase", // 数据库名称
  charset: "UTF8_GENERAL_CI", // 连接字符集,默认为 UTF8_GENERAL_CI
  connectTimeout: 10000, // 连接超时时间,单位为毫秒
  multipleStatements: false // 是否允许一个 query 中有多个 MySQL 语句,默认为 false
});

// 连接到数据库
connection.connect((err) => {
  if (err) {
    console.error("Error connecting to database:", err);
    return;
  }
  console.log("Connected to database");
  
  // 在这里执行数据库操作
});

// 在数据库连接关闭时触发
connection.on("end", () => {
  console.log("Database connection closed");
});

// 在发生错误时触发
connection.on("error", (err) => {
  console.error("Database error:", err);
});

// 关闭数据库连接
connection.end();

在这个示例中,我们使用 mysql.createConnection() 方法创建了一个数据库连接,并传递了连接参数(主机名、用户名、密码和数据库名称)。然后,我们使用 connection.connect() 方法来连接到数据库。

在连接成功后,您可以在回调函数中执行数据库操作。在这个示例中,我们只是简单地输出连接成功的消息,但您可以在这里执行任何数据库操作,如查询、插入、更新等。

请注意,为了确保数据库连接的正确关闭,我们监听了 end 事件,并在事件处理程序中关闭了连接。此外,我们还监听了 error 事件,以处理可能发生的数据库错误。

最后,我们使用 connection.end() 方法来关闭数据库连接。

请根据您的实际情况修改连接参数,以适应您的 MySQL 数据库的配置。

通过 query() 方法执行SQL语句

连接数据库之后,可以使用query()方法对数据库进行增删改查操作。

具体的语法格式:connection.query(sql,params,callback),以下是对 query() 方法的参数进行详细说明:

  • sql:要执行的 SQL 查询语句,可以是 SELECT、INSERT、UPDATE、DELETE 等。
  • params(可选):一个数组,包含要传递给 SQL 查询的参数。这些参数可以用于预处理语句中的占位符。
  • callback:一个回调函数,用于处理查询结果或错误。回调函数接收两个参数:errresultserr 是一个错误对象(如果有错误发生),results 是查询结果。

以下是一个示例,展示了如何使用 query() 方法执行 SQL 查询并处理结果:

const mysql = require("mysql2");

// 创建数据库连接
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "password",
  database: "mydatabase"
});

// 连接到数据库
connection.connect((err) => {
  if (err) {
    console.error("Error connecting to database:", err);
    return;
  }
  console.log("Connected to database");

  // 执行 SQL 查询,可以用??代替表名、字段、索引名;用?代替数据。
  const sql = "SELECT * FROM users WHERE age > ?";
  const params = [18];
  connection.query(sql, params, (err, results) => {
    if (err) {
      console.error("Error executing query:", err);
      return;
    }
    console.log("Query results:", results);
  });
});

// 在数据库连接关闭时触发
connection.on("end", () => {
  console.log("Database connection closed");
});

// 在发生错误时触发
connection.on("error", (err) => {
  console.error("Database error:", err);
});

// 关闭数据库连接
connection.end();

在这个示例中,我们执行了一个 SELECT 查询,查找年龄大于 18 的用户。我们使用了预处理语句,并将参数 [18] 传递给 query() 方法。

在回调函数中,我们处理了查询结果或错误。如果查询成功,我们打印出查询结果 results

请根据您的实际需求修改 SQL 查询语句、参数和处理逻辑。您可以执行任何有效的 SQL 查询,并根据需要处理查询结果或错误。

通过 execute() 方法执行SQL语句

以下是一个使用mysql2模块执行SQL查询的示例:

const mysql = require('mysql2');

// 创建数据库连接
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'mydatabase'
});

// 执行SQL查询
connection.execute(
  'SELECT * FROM users WHERE age > ?',
  [18],
  function(err, results, fields) {
    if (err) {
      console.log('[SELECT ERROR] - ', err.message);
      return;
    }
    console.log(results);
    // console.log(fields);
  }
);

// 关闭数据库连接
connection.end();

在这个例子中,我们创建了一个名为mydatabase的数据库连接,并执行了一个查询语句,查找年龄大于18岁的用户。如果查询成功,结果将会在控制台打印出来。你可以取消注释掉console.log(fields)这行代码来查看字段信息。

请确保将localhostrootpasswordmydatabase替换为你自己的数据库连接信息。

execute()和query()之间的区别:

下面是execute()query()之间的区别:

  1. 参数化查询:execute()方法支持参数化查询,可以使用占位符(例如?)来代替查询中的参数,而query()方法不支持参数化查询,需要通过字符串拼接来传递参数。
  2. 回调函数:execute()query()方法都接受一个回调函数作为参数,用于处理查询结果。但是,execute()方法的回调函数有三个参数(err, results, fields),分别表示错误信息、查询结果和字段信息;而query()方法的回调函数有两个参数(err, results),只表示错误信息和查询结果。
  3. 错误处理:在execute()方法中,需要手动处理错误,通过判断err参数是否存在来确定是否有错误发生。而query()方法会自动处理错误,如果发生错误,会将错误信息传递给回调函数的err参数。
  4. 返回结果:无论是execute()还是query()方法,都会返回一个结果集对象。但是,execute()方法返回的结果集对象中包含更多的信息,如受影响的行数等。
  5. 预编译:execute()方法支持预编译,可以提前编译SQL语句,以提高执行效率。而query()方法不支持预编译。

连接池

通过重新使用以前的连接,连接池可以保持打开状态,从而减少连接到MySQL服务器的时间。在Node.js中,可以使用mysql.createPool()方法来创建连接池。它的语法格式如下:

const mysql = require('mysql2');

// 创建连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydatabase',
    connectionLimit: 10, // 最大连接数
    queueLimit: 0, // 排队等待连接的最大请求数,0表示无限制
    waitForConnections: true // 当连接池达到最大连接数时,是否等待可用连接
});

使用连接池进行数据库操作可以使用pool.query()pool.execute()方法,也可以手动获取连接进行操作。下面是使用连接池进行数据库操作的示例代码:

使用pool.query()方法:

const mysql = require('mysql2');

// 创建连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydatabase',
    connectionLimit: 10
});

// 使用pool.query()方法执行查询
pool.query('SELECT * FROM users', function(err, results, fields) {
    if (err) {
        console.log('[QUERY ERROR] - ', err.message);
        return;
    }

    console.log(results);
});

// 关闭连接池
pool.end();

使用pool.execute()方法:

const mysql = require('mysql2');

// 创建连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydatabase',
    connectionLimit: 10
});

// 使用pool.execute()方法执行查询
pool.execute('SELECT * FROM users', function(err, results, fields) {
    if (err) {
        console.log('[EXECUTE ERROR] - ', err.message);
        return;
    }

    console.log(results);
});

// 关闭连接池
pool.end();

手动获取连接进行数据库操作:

const mysql = require('mysql2');

// 创建连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydatabase',
    connectionLimit: 10
});

// 从连接池中获取连接
pool.getConnection(function(err, connection) {
    if (err) {
        console.log('[CONNECTION ERROR] - ', err.message);
        return;
    }

    // 执行查询操作
    connection.query('SELECT * FROM users', function(err, results, fields) {
        connection.release(); // 释放连接回连接池

        if (err) {
            console.log('[QUERY ERROR] - ', err.message);
            return;
        }

        console.log(results);
    });
});

// 关闭连接池
pool.end();

使用 Promise

在之前通过query()和execute()操作数据库时都是通过回调函数的形式获取放返回的数据。而我们可以使用Promise将异步转化为同步使用Promise来实现异步操作可以通过async/await和promise()函数两种方式。

  • 一种是通过 async\await 来实现,
  • 种是通过 promise() 函数来实现。

下面是使用async/await和createConnection()、createPool()的方式创建数据库操作的示例代码:

使用async/await和createConnection()的方式:

const mysql = require('mysql2');

// 创建连接
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydatabase'
});

// 封装查询函数
function query(sql) {
    return new Promise((resolve, reject) => {
        connection.query(sql, function(err, results, fields) {
            if (err) {
                reject(err);
            } else {
                resolve(results);
            }
        });
    });
}

// 使用async/await进行数据库操作
async function fetchData() {
    try {
        const results = await query('SELECT * FROM users');
        console.log(results);
    } catch (err) {
        console.log('[QUERY ERROR] - ', err.message);
    } finally {
        connection.end();
    }
}

fetchData();

使用async/await和createPool()的方式:

const mysql = require('mysql2');

// 创建连接池
const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydatabase',
    connectionLimit: 10
});

// 封装查询函数
function query(sql) {
    return new Promise((resolve, reject) => {
        pool.query(sql, function(err, results, fields) {
            if (err) {
                reject(err);
            } else {
                resolve(results);
            }
        });
    });
}

// 使用async/await进行数据库操作
async function fetchData() {
    let connection;
    try {
        connection = await pool.promise().getConnection();
        const results = await connection.query('SELECT * FROM users');
        console.log(results);
    } catch (err) {
        console.log('[QUERY ERROR] - ', err.message);
    } finally {
        if (connection) {
            connection.release();
        }
        pool.end();
    }
}

fetchData();

使用promise()函数和createConnection()的方式:

const mysql = require('mysql2');

// 创建连接
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydatabase'
});

// 封装查询函数
function query(sql) {
    return new Promise((resolve, reject) => {
        connection.query(sql, function(err, results, fields) {
            if (err) {
                reject(err);
            } else {
                resolve(results);
            }
        });
    });
}

// 使用promise()函数进行数据库操作
query('SELECT * FROM users')
    .then(results => {
        console.log(results);
    })
    .catch(err => {
        console.log('[QUERY ERROR] - ', err.message);
    })
    .finally(() => {
        connection.end();
    });

无论是使用async/await还是promise()函数,都可以将异步操作转化为同步的方式来完成对数据库的操作。根据个人的喜好和项目需求,选择适合的方式来使用Promise。文章来源地址https://www.toymoban.com/news/detail-782791.html

到了这里,关于Nodejs使用mysql2操作数据库【完整讲解】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用IDEA操作Mysql数据库

    idea中自带了关于数据库的连接 首先要确保你的MySQL正在运行中  打开idea找到database( view — Tool Windows — database),大家也可以定个快捷键,方便以后日常操作  就是这个样子,然后点加号            然后就可以编写执行SQL了

    2024年02月14日
    浏览(36)
  • 【实战】nodejs 必会技能 —— 封装 mysql 数据库连接

    [mysql - mysql中文文档翻译 - Breword 文档集合]:(https://www.breword.com/mysqljs-mysql) 安装依赖包: [mysql - npm]:(https://www.npmjs.com/package/mysql) 运行中若遇到如下报错,请检查输入信息是否正确(host、port、user、password 等),jdbc配置中拿到的相关信息尤其是密码很可能是加密后的 node -

    2024年02月10日
    浏览(46)
  • Python 操作 MySQL:使用 mysql-connector-python 操作 MySQL 数据库

    大家好,我是水滴~~ 当涉及到使用 Python 操作 MySQL 数据库时, mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能,使您能够执行各种数据库操作,如连接数据库、执行查询和插入数据等。在本文中,我们将介绍如何使用 mysql-connector-python 库来

    2024年02月04日
    浏览(48)
  • python3使用pymsql操作mysql数据库

    操作系统 :Windows 10_x64 python版本 :3.9.2 pymysql版本: 1.0.2 MySQL版本: 5.7.38   之前写过一篇关于python操作mysql数据库的文章: https://www.cnblogs.com/MikeZhang/p/pythonOptMysql20170703.html 当时是基于python 2.7 和 mysql 5.5来整理的,但目前python 2.7已经不再维护,主流的是python 3,今天基于pyt

    2024年02月05日
    浏览(61)
  • MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明

    MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明 MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计 MySQL案例——多表查询以及嵌套查询 MySQL笔记——数据库当中的事务以及Java实现对数据库进

    2024年01月16日
    浏览(70)
  • MySQL Workbench 使用教程 - 如何使用 Workbench 操作 MySQL / MariaDB 数据库中文指南

    MySQL Workbench 是一款专门为 MySQL 设计的可视化数据库管理软件,我们可以在自己的计算机上,使用图形化界面远程管理 MySQL 数据库。 有关 MySQL 远程管理软件,你可以选择 Windows 下的 HeidiSQL,MacOS 下的 Sequel Ace 或者 MySQL 官方推出的跨平台客户端 MySQL Workbench 。 本文使用 Mac 版

    2024年02月10日
    浏览(43)
  • Python 操作 MySQL 数据库:使用 mysql-connector-python 库

    在现代应用程序中,与数据库的交互是不可或缺的一部分。Python 提供了许多库来连接和操作各种数据库,其中最常用的之一就是 mysql-connector-python 。本篇博客将介绍如何使用 Python 操作 MySQL 数据库,包括连接数据库、创建表、插入数据、查询数据以及更新和删除数据等操作。

    2024年02月03日
    浏览(49)
  • MySQL数据库完整性

    数据库的完整性是指数据的正确性和相容性。 数据的正确性是指数据符合现实世界语义,反映当前实际情况;数据的相容性是指数据库在同一对象的不同关系表中的数据是符合逻辑的。 数据的完整性:为了防止数据库中存在不和语义的数据 数据的安全性:为了保护数据库防

    2024年02月15日
    浏览(39)
  • .net 连接MySql数据库 + 使用Microsoft.EntityFrameworkCore.Design自动生成实体类 + 使用EFCore操作数据库

    先准备好一个mysql数据库(我这里准备的是test数据库,里面又准备了两张表,其中book表中只有两个字段,Id(bigint类型)和 Name(varchar类型)) 使用VS新建一个asp.net core web api项目(我这里使用的框架是.net5.0的,确保版本对应很重要) 打开终端 进到项目所在目录(我这里解

    2024年02月07日
    浏览(45)
  • MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

    使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 默认按升序排序。要按降序排序结果,使用 DESC 。 示例按名称按字母顺序排序结果: ORDER BY DESC 使用 DESC 以降序排序结果。 示例按名称以字母逆序排序结果: 您可以使用\\\"DELETE FROM\\\"语句从现有表格中

    2024年02月05日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包