手机版

连接MySQL数据库进行Node.js数据库操作(一)

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

介绍

先说MySQL(非广告)。MySQL由瑞典MySQL AB公司开发,后被甲骨文公司收购。像甲骨文一样,MySQL是一个典型的关系数据库。在百度百科中,MySQL被称为最好的关系数据库管理系统之一。

什么是关系数据库和非关系数据库

说到关系型数据库,我们肯定会想到与之对应的另一个词,非关系型数据库,那么两者有什么区别呢?

关系数据库是指使用关系模型(指二维表模型)组织数据,具有稳定表结构的数据库;但是,非关系数据库中的数据没有关系模型,而是以对象的形式存储在数据库中。对象之间的关系由每个对象的属性决定,这有点类似于一长串json对象。典型的非关系数据库是MongoDB和Redis。

MySQL的优缺点

我在项目中使用MySQL作为数据库主要是因为它体积小,速度快,安装后只有几百兆。和甲骨文的几个G相比,真的是“轻”了。而且核心程序采用多线程编程,线程是轻量级进程,不占用太多系统资源。所以MySQL数据库被大多数中小网站选择,最重要的是MySQL几乎是免费的。

然而,由于它的轻量级,它也“切断”了一些功能,比如存储过程。

使用

在这里,我就不重复MySQL的安装过程了。有需要的读者可以通过百度安装教程。在我们的项目中,我们通过npm install mysql - save安装依赖项。

简单的演示

首先,通过一个小演示测试我们的环境是否已经构建:

var MySQL=require(' MySQL ');//连接数据库的配置varconnection=MySQL。create connection({//主机名,一般是本地主机: 'localhost ',//数据库的端口号,如果没有设置,默认值是3306 port: 3306 //创建数据库时设置用户名user:' xyf ',//创建数据库时设置密码password:' xyf ',//创建数据库时设置数据库: ' xyf _ db ' });//与数据库connection.connect()建立连接;//查询数据库连接. query('选择1 1作为解决方案',函数(err,row,field){ if(err)throw err;console.log('解决方案是: ',行[0]。解决方案);});//关闭连接connection . end();运行程序,如果显示“解决方案是: 2”,则整个连接查询成功;如果不成功,读者可以根据打印的错误信息进行修改。

查询数据库后,需要通过end()函数关闭连接。如果连接总是打开的,首先会浪费不必要的系统资源;其次,数据库中的连接数是有限的,如果达到上限,就会出现后续连接无法报错的情况。

建立数据库连接

如果要查询数据库,必须首先与数据库建立连接。上面的演示提供了一种建立连接的方法。官方文件还给出了另外两种建立联系的方法。

隐式连接建立

var MySQL=require(' MySQL ');var connection=MySQL . create connection(.);connection . query(' SELECT 1 1 1 AS solution ',函数(err,row,field){ if(err)throw err;console.log('解决方案是: ',行[0]。解决方案);});connection . end();我们没有像在Demo中那样使用connect()函数来建立连接,而是进行了直接查询,此时将隐式调用连接。

连接回调查询

以上两种连接方式不处理连接错误。一旦出现连接错误,就会带来连锁多米诺效应,查询就会失败,整个程序就会崩溃。为了避免这种情况,我们将查询和关闭连接放入回调函数中。

var MySQL=require(' MySQL ');var connection=MySQL . create connection(.);Connection.connect(函数(err){ if(err){//错误处理控制台. log(err)当连接失败时;返回;} connection.query('选择1 1作为解决方案',函数(err,row,field){ if(err){//错误处理控制台. log(err)当查询失败时;返回错误;} console.log('解决方案是: ',行[0]。解决方案);});connection . end();});注意:以上三种建立连接的方式都是可以的,具体取决于作者如何处理连接错误。

紧密联系

我们还需要在打开数据库时关闭连接。关闭连接有两种方式,一种是我们上面使用的end()方法关闭连接,可以接收回调函数。

连接。end(函数(err){//此时连接已关闭});通过end()函数关闭连接不会影响队列中的查询。另一种方法是调用destroy()函数。

connection . destroy();destroy()函数确保不再有时间和回调来触发连接。同时,destroy()函数没有回调函数。

使用数据库连接池

数据库连接是一种关键的、有限的和昂贵的资源。-百度百科

通过上面的数据库连接方式,我们可以发现直接创建数据库连接是“危险”的,因为导致连接失败的可能性很多。此外,如果我们的程序可以随意连接数据库,我们的程序会很混乱,无法有效地管理数据库连接。mysql库为我们提供了另一种数据库连接方法。

什么是数据库连接池

数据库连接池负责分配、管理和释放数据库连接。它允许应用程序重用现有的数据库连接,而不是重新建立另一个数据库连接。该技术可以明显提高数据库操作的性能。

用一个很生动的例子来描述数据库连接池的工作:以前我们需要去银行的柜台交易货币,银行的柜台数量有限,人多的时候需要排队;现在我们在支付宝上有了所有的钱。每次需要钱的时候,直接找支付宝要。我们不再需要去银行了。和银行打交道的所有业务都交给支付宝帮我们管理。

当数据库连接池初始化时,它在数据库连接池中存储一定数量的数据库连接(该数量受最小连接数的限制)。不管是否使用这些数据库连接,连接池总是存储这么多连接。连接池中的最大数据库连接数限制了连接池同时可以拥有的最大连接数。如果超过最大连接数,请求将被添加到等待队列中。

创建连接池

让我们创建一个数据库连接池。

var MySQL=require(' MySQL ');Varpool=MySQL。create pool({ host : ' localhost ',user3360' xyf ',password3360' xyf ',port:' 3306 ',database3360' xyf _ db ',//最大连接数,10connection limit:10默认情况下,})pool . getconnection(function(err,connection){ if(err){ console . log(err);返回;} connection . query(' SELECT 1 1 AS solution ',function(err,result){ connection . release();if(err){ console . log(err);返回;} console.log('解决方案是: ',结果[0]。解决方案);})})首先,我们通过createPool()方法创建了一个数据库连接池。它的配置参数与上面的配置基本相同,只是有一个最大连接数。每次我们需要与数据库建立连接时,不是直接建立连接,而是通过pool.getConnection()去连接池“钓鱼”现有的连接。这个方法有一个回调,数据库连接作为回调参数返回给我们。

每次查询数据库时,都应该使用release()方法释放数据库连接,以便数据库连接返回连接池。如果释放后再次使用连接,将会报告错误。

关闭连接池

一般不需要关闭数据库连接池,但是如果使用连接池后需要关闭所有连接,我们可以使用pool.end()方法关闭。

Pool.end(函数(err) {//所有连接池中的数据库连接都将被关闭});end()方法提供了一个回调方法,用于在所有连接关闭时做一些事情。在关闭连接池之前,所有队列中的查询仍然会被执行,所以每次关闭的时间都是不同的。一旦调用end()方法,将不会执行getConnection和其他方法来获取连接池中的连接。

摘要

本文主要研究nodejs到mysql数据库的两种连接方式,即直接连接和通过数据库连接池连接。直接建立联系是危险的。建议使用连接池集中管理所有连接,方便又安全。

版权声明:连接MySQL数据库进行Node.js数据库操作(一)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。