Node.js学习十五(Node操作MySQL数据库)


一、在Express项目中操作数据库的主要知识

①安装操作MySQL数据库的第三方模块
②通过mysql模块连接到MySQL数据库
③通过mysql模块执行SQL语句操作数据库

1、安装mysql模块

      mysql模块是托管与npm上的第三方模块,它提供了在Node.js项目中连接和操作MySQL数据库的能力。
      想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:

npm install mysql

2、配置mysql模块

      在使用mysql模块操作MySQL数据库之前,必须先对mysql模块进行必要的配置,主要格式如下:

//导入mysql模块
const mysql = require('mysql')
const connection = mysql.createConnection({
   

})
//建立连接
connection.connect();

      在建立连接时,可以设置以下选项:
host:连接到的数据库的主机名。(默认值:localhost)
port:要连接的端口号。(默认:3306)
user:需要认证的MySQL用户。
password:MySQL用户的密码。
database:用于此连接的数据库名称(可选)。

3、使用mysql模块操作MySQL数据库

      可以在对象(如connection、pool)上调用query()方法,格式如下:

.query('SQL语句', function (error, results, fields) {
   
});

error:发生的错误;
results:结果;
fields:字段,包含关于返回结果字段的信息(可选)。

//在使用占位符值时出现
.query(sqlString, values, function (error, results, fields){
   })

sqlString:SQL语句,包含占位符
values:如果只有一个替换字符(?),且值不是null、undefined或数组,它可以直接作为.query的第二个参数传递;
callback:回调函数
注意:使用占位符可以过滤传入的值,防止SQL注入。
      如info数据库下有一个表student,数据如下:
在这里插入图片描述

(1)查询数据

      查询student表中的数据。注意:我们查询得到的每条数据都是一个对象,每个对象最后组成一个数组。

//导入mysql模块
const mysql = require('mysql')
const connection = mysql.createConnection({
   
    host:'127.0.0.1',//数据库的IP地址
    port:3306,//端口号
    user:'root',//登录数据库的账号
    password:'iampwd',//登录数据库的密码
    database:'info'//指定要操作哪个数据库
})
//建立连接
connection.connect();
//查询数据
connection.query('SELECT * FROM student',(err,result)=>{
   
    //err:可能产生的错误
    //result:SQL语句的结果
    if(err) throw err;
    console.log(result)
})

在这里插入图片描述
注意:如果执行的是select查询语句,则执行的结果是数组。

(2)插入数据

      向student表中新增数据,s_name为小小,s_BIRTHDAY为2020-09-09,s_gender为女。

//导入mysql模块
const mysql = require('mysql')
const connection = mysql.createConnection({
   
    host:'127.0.0.1',//数据库的IP地址
    port:3306,//端口号
    user:'root',//登录数据库的账号
    password:'iampwd',//登录数据库的密码
    database:'info'//指定要操作哪个数据库
})
//建立连接
connection.connect();
//插入数据
connection.query(`INSERT INTO student VALUES('09','小小','2020-09-09','女')`,(err,result)=>{
   
    //err:可能产生的错误
    //result:SQL语句的结果
    if(err) throw err;
    console.log(result)
})

在这里插入图片描述
在这里插入图片描述
注意:如果执行的是insert into插入语句,则results是一个对象,可以通过affectedRows属性,如果它等于1,则证明插入数据成功。

(3)更新数据

      更新student表中的数据。

//导入mysql模块
const mysql = require('mysql')
const connection = mysql.createConnection({
   
    host:'127.0.0.1',//数据库的IP地址
    port:3306,//端口号
    user:'root',//登录数据库的账号
    password:'iampwd',//登录数据库的密码
    database:'info'//指定要操作哪个数据库
})
//建立连接
connection.connect();
//更新数据
connection.query('UPDATE student SET s_name="lucky" WHERE s_id=07',(err,result)=>{
   
    //err:可能产生的错误
    //result:SQL语句的结果
    if(err) throw err;
    console.log(result)
})

在这里插入图片描述
在这里插入图片描述
注意:如果执行的是update语句,则执行的结果results也是一个对象,可以通过affectedRows属性,如果它等于1,则证明更新数据成功。

(4)删除数据

      在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据。示例如下:
      删除student表中的数据。

//导入mysql模块
const mysql = require('mysql')
const connection = mysql.createConnection({
   
    host:'127.0.0.1',//数据库的IP地址
    port:3306,//端口号
    user:'root',//登录数据库的账号
    password:'iampwd',//登录数据库的密码
    database:'info'//指定要操作哪个数据库
})
//建立连接
connection.connect();
connection.query('DELETE FROM student WHERE s_id=08',(err,result)=>{
   
    //err:可能产生的错误
    //result:SQL语句的结果
    if(err) throw err;
    console.log(result)
})

在这里插入图片描述
在这里插入图片描述
注意:执行delete语句之后,结果也是一个对象,也会包含affectedRows属性,如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值;如果SQL语句中只有一个占位符,则可以省略数组。

总结:执行删除更新插入返回对象,如果返回对象的属性中的affectedRows大于0,说明执行成功;执行查询返回数组

4、连接池技术

      上面使用mysql.createConnection()的方法有一个缺陷,就是每操作一张表就要建立一次连接对象,如果一个项目中有很多表,那就要和数据库创建很多次连接,再断开,效率很低,也容易出现问题。所以我们接下来就要学习数据库连接池技术。
       数据库连接池是程序启动时建立足够数量的数据库连接对象,并将这些连接对象组成一个池,由程序动态地对池中的连接对象进行申请、使用和释放。

(1)使用数据库连接池原理及优点

      数据库连接池在初始化时将会创建一定数量的数据库连接对象放到连接池中,连接池都将一直保证至少拥有这么多的连接数量,当有数据库需要被连接的时候,它会向数据库连接池申请资源和使用,使用完成后会释放到数据库连接池中。当然数据库连接池中拥有最小连接数量和最大连接数量,当数据库的连接超过连接池中最大的数量的时候,这些请求将被加入到等待队列中。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值