位置: 编程技术 - 正文

从零学习node.js之mysql数据库的操作(五)(node.js快速入门)

编辑:rootadmin

推荐整理分享从零学习node.js之mysql数据库的操作(五)(node.js快速入门),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node.js自学,node.js怎么学,node.js自学,怎么学node.js,node.js入门教程,node.js自学,学node.js需要什么基础,node.js入门教程,内容如对您有帮助,希望把文章链接给更多的朋友!

准备工作

在使用node操作mysql数据库时,需要先下载mysql模块:

在引入mysql模块后,就可以进行数据库的连接和其他的操作了。

一、连接数据库

首先保证本地已经安装数据库,并已正常启动,然后开始进行连接:

执行node test.js后,就会输出:

连接成功,然后连接关闭。这就说明程序可以正常连接数据库了,然后就开始进行增删改查的操作。

二、CURD

比如我们有这样的一个user表,里面有4个字段,其中uid是自增字段:

uid username password email 1 meizi meizi @qq.com 2 test test @qq.com

我们就对这个表进行增删改查的操作。

mysql中有个query方法可以用来执行任意正确的sql语句,然后在回调函数里给出执行sql语句后的结果。query方法是异步执行的,若并列书写多个query方法的话,是不能按照书写顺序依次阻塞式执行的。

2.1 查询

使用最普遍最多的就是查询操作了。

输出的结果:

可以看到,结果集是一个数组,数组中的每条数据都是一个RowDataPacket对象,在使用时,可以像json对象一样获取数据,也可以使用JSON.stringify把result转换为json字符串,但是,result并不是JSON数据。而且,即使结果集中只有一条数据,也是以数组的形式返回的。

输出即为字符串类型的数据。

2.2 添加

向数据库中添加数据使用的是INSERT,INSERT语句有两种形式都可以使用:

第1种,先列好要插入的数据对应的字段,然后跟上数据(如果要给所有的字段都插入数据,可以省略字段不写,但是数据的书写顺序要跟数据表里的字段一一对应):

第2种,可以像update操作一样书写,将field与value对应的更紧密:

我更加喜欢第2种方式,这种方式更能看出操作了哪些字段,看出字段和数据的对应关系。在node中插入数据:

插入数据后返回的结果是:

affectedRows表示数据表中受影响的行数,数据插入成功则为1,失败则为0;在主键自增的情况下,insertId是数据插入成功后对应的主键id,如果主键不自增,则insertId为0。

2.3 更新

使用update语句更新数据:

输出的结果:

可以看到输出结果的类型与插入数据时输出结果的类型是一样的。我们分析一下,执行sql语句后,有3种结果:

成功修改数据: affectedRows:1, changedRows:1 要修改的数据与原数据相同: affectedRows:1, changedRows:0 未找到需要修改的数据: affectedRows:0, changedRows:0

因此可以根据这两个字段输出相应的结果。

2.4 删除

使用delete语句删除语句:

输出的结果:

删除成功,则affectedRows为1,删除的数据不存在,则为0。

从零学习node.js之mysql数据库的操作(五)(node.js快速入门)

三、连接池

数据库连接是一种有限的,能够显著影响到整个应用程序的伸缩性和健壮性的资源,在多用户的网页应用程序中体现得尤为突出。

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

3.1 创建连接池

使用mysql.createPool()可创建连接池:

getConnection()可以共享一个连接,或管理多个连接。

连接使用完后通过调用connection.release()方法可以将连接返回到连接池中,这个连接可以被其它人重复使用:

可以使用connection.destroy()彻底销毁连接。

3.2 连接池事件

createPool()方法会返回一个连接池实例对象,这个对象中有一些事件。

connection

连接池中产生新连接时会发送'connection'事件:

3.3 QUERY与GETCONNECTION的区别

这两个方法都能进行操作,那么这两者有什么区别呢?

在pool.getConnection中的connection在其回调函数里是一直的,可以保证这一系列的操作都是在同一个connection中执行的;pool.query则每次执行时可能会在不同的connection中执行,可能会得到意想不到的结果。

比如SQL_CALC_FOUND_ROWS和FOUND_ROWS这需要两个sql语句完成,是获取检索行的数目。

这两个可能在不同的connection中执行,第2个sql语句返回的就不是上一个sql语句的结果了。

四、sql防注入

sql防注入的关键就是不能直接把数据拼接到sql语句中,必须得对数据进行转义,或者使用提供的方法拼接sql语句。这里主要有四种方法可以使用。

4.1 使用ESCAPE()对参数进行编码

参数编码方法有:mysql.escape()/connection.escape()/pool.escape() ,这三个方法可以在你需要的时候调用:

对双引号进行了安全转义。

escapeId()可以对不信任的表名,字段名进行转义。

同时,escape()的编码规则如下:

Numbers不进行转换 Booleans转换为true/false Date对象转换为'YYYY-mm-dd HH:ii:ss'字符串 Buffers转换为hex字符串,如X'0fa5' Strings进行安全转义 Arrays转换为列表,如[‘a', ‘b']会转换为'a', ‘b' 多维数组转换为组列表,如[[‘a', ‘b'], [‘c', ‘d']]会转换为(‘a', ‘b'), (‘c', ‘d') Objects会转换为key=value键值对的形式。嵌套的对象转换为字符串 undefined/null会转换为NULL MySQL不支持NaN/Infinity,并且会触发MySQL错误

4.2 占位符

可以使用&#;作为参数占位符。在使用查询参数占位符时,在其内部自动调用 connection.escape() 方法对传入参数进行编码。

同时,如果执行添加或更新操作时,还可以这样写:

数据库中的表明和字段名,可以使用&#;&#;作为占位符,在拼接完成后会自动添加上``:

4.3 使用MYSQL.FORMAT()转义参数

不多说,样例如下:

五、多语句查询

出于安全考虑node-mysql默认禁止多语句查询(可以防止SQL注入),启用多语句查询可以将multipleStatements选项设置为true:

启用后可以在一个query查询中执行多条语句:

总结

本节只是总结了node对mysql数据库的各种操作,但如果实际应用起来的话,还远远不够。努力学习中…希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Node.JS中事件轮询(Event Loop)的解析 当我们知道I/O操作和创建新线程的开销是巨大的!网站延迟的开销对于一个网站,后台大多不需要进行复杂的计算,我们的程序大多时间花费在I/O读取

从零学习node.js之express入门(六) 一、介绍什么是express,为什么要使用express?根据官方网站的说法,express是一个基于Node.js平台的极简、灵活的web应用开发框架,它提供一系列强大的特

从零学习node.js之利用express搭建简易论坛(七) 一、应用生成器使用上节学习到express的知识,我们也可以从0开始,一步步把系统搭建起来。不过express中还有一个应用生成器,使用这个应用生成器可

标签: node.js快速入门

本文链接地址:https://www.jiuchutong.com/biancheng/376385.html 转载请保留说明!

上一篇:Nodejs多站点切换Htpps协议详解及简单实例(nodejs跳转到指定页面)

下一篇:Node.JS中事件轮询(Event Loop)的解析(nodejs事件循环和js事件循环)

  • 母子公司的关联交易怎么看
  • 小规模纳税人可以开数电专票吗
  • 积分兑换开始啦
  • 开民工工资专户
  • 毛利和销售毛利
  • 培训发生的住宿费 差旅费可以放入职工教育经费吗
  • 发票领用簿怎么领发票
  • 代理进口业务
  • 增值税进项没收到必须开销项怎么办?
  • 零税率购房发票
  • 固定资产对外投资的税务处理
  • 补记以前年度收入在报表中怎么处理
  • 企业筹办期间发生的费用处理
  • 装修费算固定资产吗?
  • 个体户定额定税要做账吗
  • 公司扣了员工的个人所得税但没有帮员工申报
  • 电商公司贷款条件
  • win10永久激活码神key一周内
  • 建筑劳务公司计提工资怎么做账
  • 关于出售使用过的车辆
  • php类和对象
  • ios 的 safari 浏览器
  • 发行可转换优先股记入权益工具吗
  • 美国布莱斯大峡谷成因
  • 吃辣第二天长痘痘
  • 简述gnss数据处理流程
  • 建筑劳务公司的法人代表有什么责任
  • 盘盈的存货计入哪个科目
  • YII视图整合kindeditor扩展的方法
  • 学堂在线结课后还能看吗
  • iconfont原理
  • eterm指令退出a
  • thinkphp自动加载类
  • 增值税发票认证不了怎么回事
  • 命令行怎么管理员运行
  • 法人借钱给公司,公司可以直接转给法人吗
  • 以前年度的成本忘了结转然后怎么办
  • 运输发票必须附票吗
  • ecs怎么用
  • SQL Server 2008 r2 完全卸载方法分享
  • 小规模纳税人会自动转为一般纳税人
  • 小规模纳税人申报纳税详细流程
  • 委托加工业务中需要计算缴纳增值税销项税
  • 营业外支出什么科目借贷方向
  • 递延所得税资产和递延所得税负债
  • 公司账户转账转错了能退回来吗
  • 房屋租赁税按什么收
  • 收到货物抵账的会计分录
  • 营业成本年末怎么结转
  • 应交增值税借贷方发生额表示
  • 享受研发费用加计扣除需要什么条件
  • 公司打款账号模板图片
  • 关于注册资本的最新规定
  • sqlserver存储过程怎么查看
  • windowsxp2
  • thinkpadx230i5
  • 电脑如何修改硬盘启动顺序
  • OS X 10.10 Yosemite的新特性与iOS联系更紧密
  • .ctc文件
  • s24evmon.exe - s24evmon是什么进程 有什么用
  • pphelper是什么文件
  • linux安装atop
  • jQuery ajax读取本地json文件的实例
  • js操作list
  • 批处理 dp0
  • android 图片
  • python文本处理教程
  • Node.js中的事件循环是什么
  • chrome version
  • js匿名类
  • JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
  • android ListView之——ArrayAdapter使用
  • python中运算符重载方法
  • 安徽省电子税务局怎么下载
  • 个人所得税子女教育和赡养老人抵扣多少税
  • 设立新的机构或开办新的业务
  • 土地整理费用由谁承担
  • 浙江税务局网络发票页无法打字
  • 个体税务登记资料不齐怎么办
  • 云南省国税发票查询真伪查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设