第十二节:Node通过mysql2连接MySQL数据库

一. 简介

1. 常用的库

    mysql:最早的Node连接MySQL的数据库驱动;  

    mysql2:在mysql的基础之上,进行了很多的优化、改进;  【推荐使用】

2. mysql2简介  

  (1). mysql2兼容mysql的API,并且提供了一些附加功能

  (2). 更快/更好的性能;

  (3). Prepared Statement(预编译语句):

       ✓ 提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的;

       ✓ 防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不会被执行;

  (4). 支持Promise,所以我们可以使用async和await语法

 

二. 基本使用

1. 基本用法

 (1). 通过指令进行安装: 【npm install mysql2】

 (2). 通过query方法进行查询

const mysql = require("mysql2");
//创建一个连接
const connection = mysql.createConnection({
	host: "47.xx.xx.xx",
	port: 3306,
	database: "CoreFrameDB",
	user: "root",
	password: "xxxx",
});

// 1.基本查询
{
	const statement = "SELECT * FROM `T_SysUser`;";
	// DDL/DML/DQL/DCL
	connection.query(statement, (err, values, fields) => {
		if (err) {
			console.log("查询失败:", err);
			return;
		}
		console.log(values); // 查看结果
		// console.log(fields);   //字段相关信息
	});
} 

2. 预处理语句

(1).用途

   A. 提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行也只会编译一次,所以性能是更高的;

   B. 防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不会被执行

(2). 使用

    通过调用excute方法,传入参数即可。

{
	const statement =
		"SELECT * FROM `T_SysUser` WHERE userSex = ? AND delFlag = ?;";
	// 这里的【1,0】 就是上面sql中?位置的传值
	connection.execute(statement, [1, 0], (err, values) => {
		console.log(values); //返回查询结果
	});
}

 

三. 连接池

    mysql2给我们提供了连接池(connection pools);

    连接池可以在需要的时候自动创建连接,并且创建的连接不会被销毁,会放到连接池中,后续可以继续使用;

    我们可以在创建连接池的时候设置LIMIT,也就是最大创建个数

const mysql = require("mysql2");

// 1.创建一个连接池
const connectionPool = mysql.createPool({
	host: "47.xx.xxx.xxx",
	port: 3306,
	database: "CoreFrameDB",
	user: "root",
	password: "xxx",
	connectionLimit: 5,
});

// 2.执行一个SQL语句: 预处理语句
const statement =
	"SELECT * FROM `T_SysUser` WHERE userSex = ? AND delFlag = ?;";
// 这里的【1,0】 就是上面sql中?位置的传值
connectionPool.execute(statement, [1, 0], (err, values) => {
	console.log(values); //返回查询结果
});

 

四. promise写法 

   
   mysql2同样是支持Promise和await、async的方式

代码分享:

const mysql = require("mysql2");
const connectionPool = mysql.createPool({
	host: "47.xx.xx.88",
	port: 3306,
	database: "CoreFrameDB",
	user: "root",
	password: "xxx",
	connectionLimit: 5,
});

// 1. Promise写法
{
	const statement =
		"SELECT * FROM `T_SysUser` WHERE userSex = ? AND delFlag = ?;";
	connectionPool
		.promise()
		.execute(statement, [1, 0])
		.then(res => {
			// console.log(res); //返回是一个数组,这个数组内部又包含两个数组,第一个数组是查询内容,第二个数组是字段名
			// 所以通常对数组进行解构
			let [values, fileds] = res;
			console.log(values);
		})
		.catch(err => {
			console.log(err);
		});
}

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2023-02-17 16:02  Yaopengfei  阅读(869)  评论(0编辑  收藏  举报