Node.js教程-mysql模块

概述

Node.js中,mysql模块是实现MySQL协议的JavaScript客户端工具。Node.js程序通过与MySQL建立链接,然后可对数据进行等操作。

安装

由于mysql模块不是Node.js内置模块,需手动安装

npm i mysql

注意:若MySQL服务的版本高于8.0.4时,请安装mysql2模块,否则连接时会出现身份验证错误。

使用

连接数据库

mysql.createConnection(options) // 返回 Connection 对象

参数说明:

  • options 配置参数
    • host 主机地址。默认为localhost
    • user 用户名
    • password 密码
    • port 端口号。默认为3306
    • database 数据库名
    • charset 字符集。默认为UTF8_GENERAL_CI
    • localAddress 此IP用于TCP连接
    • socketPath 连接到 unix 域路径,有值会忽略 hostport
    • timezone 时区。默认为local
    • connectTimeout 连接超时时长,单位 毫秒。默认为不限制
    • stringifyObject 是否序列化对象
    • dateStrings 强制将timestampdatetimedate类型以字符串型返回。默认为false
    • multipleStatements 是否允许一个 query 中有多个 mysql 语句。默认为false

Connection 方法

方法说明
connect() 建立连接
query(sql[, values][, callback])对数据库进行等操作
end()在确保当前正在处理的 SQL 语句正常完成后断开连接
destroy()立即断开连接,不管当前是否正在执行任务

Connection 属性

属性说明
threadId 当前连接线程 ID
// 引入 mysql 模块
const mysql = require('mysql')// 创建连接对象
const conn = mysql.createConnection({host: '127.0.0.1',port: '3306',database: 'node_db',user: 'root',passord: '123456'
})// 建立连接
conn.connect()

操作数据库

查询数据
const mysql = require('mysql2')// 创建 Connnection 实例
const conn = mysql.createConnection({host: '127.0.0.1',port: 3306,database: 'db',user: 'root',password: '123456'
})// 建立连接
conn.connect()// 无查询条件
const sql1 = "select * from talbe_name"
conn.query(sql1, (err, result) => {if (err) {console.error("查询数据出现异常:" + err.message)}console.log(result)
})// 有查询条件
const sql2 = "select * from talbe_name where col1 > ? and col2 = ? ..."
conn.query(sql2, [col1_val, col2_val, ...], (err, result) => {if (err) {console.error("查询数据出现异常:" + err.message)}console.log(result)
})// 管理连接
conn.end()

注意:通过query()查询,获取的数据结果为一个数组。

插入数据
const mysql = require('mysql2')// 创建 Connection 实例
const conn = mysql.createConnection({host: "127.0.0.1",port: 3306,database: "db",user: "root",password: "123456"
})// 建立连接
conn.connect()/****************** 插入操作 *********************/
const sql1 = "insert into talbe_name values(?, ?, ...)"
conn.query(sql1, [col1_val, col2_val, ...], (err, data) => {if (err) {console.error("插入数据出现异常:" + err.message)}// 判断数据是否插入成功if (data.affectedRows !== 1) {console.error("插入数据失败")}console.log("数据插入成功")
})const sql2 = "insert into (col1, col2, ...) talbe_name values(?, ?, ...)"
conn.query(sql2, [col1_val, col2_val, ...], (err, data) => {if (err) {console.error("插入数据出现异常:" + err.message)}// 判断数据是否插入成功if (data.affectedRows !== 1) {console.error("插入数据失败")}console.log("数据插入成功")
})// 此种方式中 query中的第二个参数名必须和数据库中表的名称一样
const sql3 = "insert into talbe_name set ?"
conn.query(sql3, xx, (err, data) => {if (err) {console.error("插入数据出现异常:" + err.message)}// 判断数据是否插入成功if (data.affectedRows !== 1) {console.error("插入数据失败")}console.log("数据插入成功")
})// 断开连接
conn.end()
修改数据
const mysql = require('mysql2')// 创建 Connection 实例
const conn = mysql.createConnection({host: "127.0.0.1",port: 3306,database: "db",user: "root",password: "123456"
})// 建立连接
conn.connect()/****************** 更新操作 *********************/
const sql1 = "updte user talbe_name col1 = ?, col2=?, ... where id = ?)"
conn.query(sql1, [col1_val, col2_val, ..., id_val], (err, data) => {if (err) {console.error("插入数据出现异常:" + err.message)}// 判断数据是否插入成功if (data.affectedRows !== 1) {console.error("插入数据失败")}console.log("数据插入成功")
})// 此种方式中 query中的第二个参数名必须和数据库中表的名称一样
const sql3 = "update talbe_name set ? where id = ?"
conn.query(sql3, [xx, id_val], (err, data) => {if (err) {console.error("更新数据出现异常:" + err.message)}// 判断数据是否插入成功if (data.affectedRows !== 1) {console.error("更新数据失败")}console.log("数据更新成功")
})// 断开连接
conn.end()
删除数据
const mysql = require('mysql2')// 创建 Connnection 实例
const conn = mysql.createConnection({host: '127.0.0.1',port: 3306,database: 'db',user: 'root',password: '123456'
})// 建立连接
conn.connect()// 无条件删除
const sql = "delete from talbe_name "
conn.query(sql1, (err, data) => {if (err) {console.error("删除数据出现异常:" + err.message)}// 判断数据是否删除成功if (data.affectedRows > 0) {console.error("删除数据失败")}console.log(result)
})// 有条件删除
const sql2 = "delete from talbe_name where id = ?"
conn.query(sql2, id_val, (err, data) => {if (err) {console.error("删除数据出现异常:" + err.message)}// 判断数据是否删除成功if (data.affectedRows !== 0) {console.error("删除数据失败")}console.log(result)
})// 管理连接
conn.end()

问题

连接报ER_NOT_SUPPORTED_AUTH_MODE错误

原因

MySQL 8.0.4开始,MySQL默认身份验证插件从 mysql_native_password改为caching_sha2_password所导致的。

解决方式

解决方式有两种:

  1. 身份验证插件改 mysql_native_password
  2. 安装 mysql2模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 几种引用类型_Java 四种引用类型总结-Fun言

1. Java引用介绍Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用⑴ 强引用(Strong Reference)强引用是使用最普遍的引用,也是赋值的默认引用。如果一个对象具有强引用&…

JS运算符类型

一、运算符类型 1、算术运算符&#xff1a;用于各类数值运算&#xff0c;包括加()、减(-)、乘(*)、除(/)、求余(或称模运算&#xff0c;%)、自增()、自减(--)共七种。2、关系运算符&#xff1a;用于比较运算。包括大于&#xff08;>&#xff09;、小于&#xff08;<&…

python关于字符串的内置函数_Python 字符串内置函数(二)

# 2.格式化相关# ljust(width) 函数 获取固定长度&#xff0c;左对齐&#xff0c;右边不够用空格补齐# rjust(width) 函数 获取固定长度&#xff0c;右对齐&#xff0c;左边不够用空格补齐# center(width) 函数 获取固定长度&#xff0c;中间对齐&#xff0c;两边不够用空格补齐…

边缘计算4.0正急速驶来,你做好准备了吗?

物联网智库 整理发布导 读近十年间&#xff0c;各行各业的企业都经历着数字化技术和产品对传统生产经营模式的冲击。人工智能、大数据、区块链、自动化等技术的日渐完善&#xff0c;让企业的生产效率和业务模式发生了翻天覆地的变化。

java中for的常规用法_Java for循环的几种用法详解

本文非常适合初学Java的程序员&#xff0c;主要是来了解一下Java中的几种for循环用法&#xff0c;分析得十分详细&#xff0c;一起来看看。J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环&#xff0c;可以用更简单地方式来遍历数组和Collection等类型的对象。本文介…

运维-替换-修改kibana徽标

作为一名纯运维人员&#xff0c;想更改kibana的徽标。 并不能像开发一样去看源码并修改源码。 所以我们可以替换徽标。 先来一个效果图。我的版本是5.5.1。 具体的修改过程&#xff1a; 在kibana安装路径下面。 optimize/bundles/ 0cebf3d61338c454670b1c5bdf5d6d8d.svg 这…

python中的变量的作用_Python中的变量作用域

python中变量作用域包括&#xff1a;L (Local) 局部作用域&#xff0c;函数内部声明但没有使用global的变量E (Enclosing) 闭包函数外的函数中&#xff0c;def或者lambda的本地作用域G (Global) 全局作用域&#xff0c;函数中使用global声明的变量或在模块层声明的变量B (Built…

欧拉公式——真正的宇宙第一公式

来源&#xff1a;数学中国欧拉公式是数学里最令人着迷的公式之一&#xff0c;它将数学里最重要的几个常数联系到了一起&#xff1a;两个超越数&#xff1a;自然对数的底e&#xff0c;圆周率π&#xff1b;两个单位&#xff1a;虚数单位i和自然数的单位1&#xff0c;以及数学里常…

SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

我们这一一篇博客讲的是如何整合Springboot和Mybatis框架&#xff0c;然后使用generator自动生成mapper&#xff0c;pojo等文件。然后再使用阿里巴巴提供的开源连接池druid&#xff0c;这个连接池的好处我就不说了&#xff0c;集合了所有连接池的好处&#xff0c;并且还提供了监…

python提取部分字符串三参数_python3 字符串属性(三)

maketrans 和 translate的用法(配合使用)下面是python的英文用法解释maketrans(x, yNone, zNone, /)Return a translation table usable for str.translate().If there is only one argument, it must be a dictionary mapping Unicodeordinals (integers) or characters to Un…

java实现qq抢红包_Java实现抢红包功用

用多线程模仿多人一起抢红包。服务端将玩家发出的红包保存在一个行列里&#xff0c;然后用Job守时将红包信息推送给玩家。每一批玩家的抢红包恳求&#xff0c;其实操作的都是从行列中弹出的第一个红包元素&#xff0c;但当时的红包数量为空的时分&#xff0c;主动弹出下一个红包…

芯片里面100多亿个晶体管是如何安装上去的?

来源&#xff1a;金属加工如今随着芯片制程的不断提升&#xff0c;芯片中可以有100多亿个晶体管&#xff0c;如此之多的晶体管&#xff0c;究竟是如何安上去的呢&#xff1f;1当芯片被不停地放大&#xff0c;里面宛如一座巨大的城市。这是一个Top-down View 的SEM照片&#xff…

[CEOI2008] order

题目描述 有N个工作&#xff0c;M种机器&#xff0c;每种机器你可以租或者买过来. 每个工作包括若干道工序&#xff0c;每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数&#xff0c;求最大利润 输入输出格式 输入格式&#xff1a; 第一行给出 N…

response.end后抛了异常_(七)异常处理

(七)异常处理异常异常的体系结构java.lang.Throwable|-----java.lang.Error&#xff1a;一般不便携针对性的代码进行处理|-----java.lang.Exception&#xff1a;可以进行异常的处理|-----编译时异常&#xff08;checked|-----IOException|-----FileNotFoundException|-----Clas…

java xy x y_为什么该语句在Java中不起作用x ^ = y ^ = x ^ = y;

小编典典您的陈述大致相当于这种扩展形式&#xff1a;x x ^ (y y ^ (x x ^ y));与C语言不同&#xff0c;在Java中&#xff0c;保证二进制运算符的左操作数在右操作数之前进行求值。评估如下&#xff1a;x x ^ (y y ^ (x x ^ y))x 1 ^ (y 2 ^ (x 1 ^ 2))x 1 ^ (y 2 ^…

AI+视频分析:实时监测无处不在的安全风险

来源丨Forbes作者丨Louis Columbus编译丨科技行者纵观2020年运营层面的诸多挑战&#xff0c;公共事业企业已经意识到对其所运营的物理及网络安全体系进行360度全方位审视的重要意义。最近&#xff0c;由Gartner发布的调查报告显示&#xff0c;94%的北美CIO认为&#xff0c;对偏…

大数据第一期

一 、大数据的技术体系 有几个部分组成&#xff1a; 六层 数据可视化 &#xff08;Cboard &#xff0c; Echart&#xff09; 五层 数据分析&#xff08;数据仓库&#xff08;Hive&#xff09;&#xff0c;数据挖掘&#xff08;SparkStreming&#xff09;&#xff0c;OLAP&…

python 绘图的背景颜色不要_matplotlib自定义添加 “哆啦A梦”背景图,这个操作真牛逼!...

为什么需要加星标&#xff1f;由于微信公众号出现了 “乱序” 排列的状况&#xff0c;也就是说&#xff1a;文章不会按照 “时间顺序” 推送给你。那么朋友们就不能第一时间&#xff0c;收到我的干货。因此希望您抽出一分钟&#xff0c;完成如下三步。数据分析与统计学之美原创…

台积电2nm工艺重大突破!

来源&#xff1a;万物智能视界根据最新报道&#xff0c;台积电已经在2nm工艺上取得一项重大的内部突破&#xff0c;虽未披露细节&#xff0c;但是据此乐观预计&#xff0c;2nm工艺有望在2023年下半年进行风险性试产&#xff0c;2024年就能步入量产阶段。台积电还表示&#xff0…

png文件合并_png格式图片和jpg格式图片有什么区别?

两个格式的图片群文件有一定的相似之处&#xff0c;png是无损压缩&#xff0c;可以在PS中重新编辑。.jpg格式是一种压缩的图片文件&#xff0c;不能再次编辑&#xff0c;而且在解析度上也是不如.png格式。具体介绍如下&#xff1a;1、png是无损压缩&#xff0c;png即可移植网络…