Node 中使用 MySQL

本文介绍了在Node.js开发中如何使用mysql2库来连接和操作MySQL数据库。相较于原始的mysql库,mysql2提供了更好的性能、PreparedStatement以防止SQL注入,以及对Promise的支持,便于使用async/await。通过示例展示了创建数据库连接、执行SQL查询、插入、删除和更新数据的基本步骤。同时,还给出了项目的初始化和数据库的创建与填充示例。
摘要由CSDN通过智能技术生成

Node 中使用 MySQL

认识 mysql2

  • 前面我们所有的操作都是在GUI工具中,通过执行SQL语句来获取结果的,那真实开发中肯定是通过代码来完成所有的操作的。
  • 那么如何可以在Node的代码中执行SQL语句来,这里我们可以借助于两个库:
    • mysql:最早的Node连接MySQL的数据库驱动;
    • mysql2:在mysql的基础之上,进行了很多的优化、改进;
  • 目前相对来说,我更偏向于使用mysql2mysql2兼容mysqlAPI,并且提供了一些附加功能
    • 更快/更好的性能;
    • Prepared Statement(预编译语句):
      • 提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储它但是不执行,之后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的;
      • 防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不会被执行;
    • 支持Promise,所以我们可以使用asyncawait语法
    • 等等…
  • 所以后续的学习中我会选择mysql2node中操作数据。

使用 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文件

    • 安装mysql2npm 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);
      });
      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值