Node 中使用 MySQL
认识 mysql2
- 前面我们所有的操作都是在
GUI
工具中,通过执行SQL
语句来获取结果的,那真实开发中肯定是通过代码来完成所有的操作的。 - 那么如何可以在
Node
的代码中执行SQL
语句来,这里我们可以借助于两个库:mysql
:最早的Node
连接MySQL
的数据库驱动;mysql2
:在mysql
的基础之上,进行了很多的优化、改进;
- 目前相对来说,我更偏向于使用
mysql2
,mysql2
兼容mysql
的API
,并且提供了一些附加功能- 更快/更好的性能;
Prepared Statement
(预编译语句):- 提高性能:将创建的语句模块发送给
MySQL
,然后MySQL
编译(解析、优化、转换)语句模块,并且存储它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的; - 防止
SQL
注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL
注入的内容不会被执行;or 1 = 1
不会被执行;
- 提高性能:将创建的语句模块发送给
- 支持
Promise
,所以我们可以使用async
和await
语法 - 等等…
- 所以后续的学习中我会选择
mysql2
在node
中操作数据。
使用 mysql2
- 安装
mysql2
npm install mysql2
mysql2
的使用过程如下:- 第一步:创建连接(通过
createConnection
),并且获取连接对象; - 第二步:执行
SQL
语句即可(通过query
);
- 第一步:创建连接(通过
项目展示
-
桌面新建文件
learn_mysql_node
-
初始化项目:
npm init -y
-
在
package.json
中配置脚本-
安装热部署:
npm i nodemon
{ "name": "learn_mysql_node", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "nodemon ./src/app.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "mysql2": "^2.3.3", "nodemon": "^2.0.16" } }
-
-
打开
Navicat
,鼠标右击localhost_3306
新建mall
数据库 -
在数据库
mall
下面新建user
表use mall; CREATE TABLE `user` ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20), `password` VARCHAR(20), nickName VARCHAR(20), age INT, birthday TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) INSERT INTO `user` SET username = 'admin',password = '123456',nickname = '张三',age = 18; INSERT INTO `user` SET username = 'lisi',password = '123456',nickname = '李四',age = 18; INSERT INTO `user` SET username = 'wangwu',password = '123456',nickname = '王五',age = 18; INSERT INTO `user` SET username = 'zhaoliu',password = '123456',nickname = '赵六',age = 18; SELECT * FROM `user`;
-
根目录下新建文件夹
src
,在文件夹src
下新建app.js
文件-
安装
mysql2
(npm i mysql2
)const mysql = require("mysql2"); // 创建 mysql 数据库连接 const connection = mysql.createConnection({ // 数据库主机地址 host: "localhost", // 端口号 prot: 3306, // 数据库用户名 user: "root", // 数据库密码 字符串 password: "123456", // 指定数据库 database: "mall", }); // 查询sql语句 const querySQL = "select * from user"; // 添加sql语句 const addSQL = "insert into user set ?"; // 添加的数据 const userOBJ = { username: "xiaoliu", nickname: "小刘", password: "123456", age: 36, }; // 删除sql语句 const delSQL = "delete from user where id=?"; // 修改sql语句 const editSQL = "update user set ? where id=?"; // 修改的数据 const editOBJ = { username: "dada", nickname: "大大", password: "123456", age: 11, }; // 添加 // connection.query(addSQL, userOBJ, (err, result, fields) => { // console.log(result); // }); // 删除 // connection.query(delSQL, [1], (err, result, fields) => { // console.log(result); // }); // 修改 connection.query(editSQL, [editOBJ, 7], (err, result, fields) => { console.log(result); }); // 查询 /** * querySQL sql * [] 提交/数据 * callback(err,result,fields)=>{} * err sql执行时产生的错误 * result 结果 * fields 字段 */ connection.query(querySQL, [], (err, result, fields) => { console.log(result); });
-