Nodejs 与 MySQL数据库交互

本文详述了如何在Node.js中使用mysql模块与MySQL数据库进行交互,包括连接数据库、操作数据库(CRUD)、使用连接池、处理数据库重连、转义查询值和标识符等关键步骤,提供了一系列实例和参考链接。
摘要由CSDN通过智能技术生成

本文将介绍如何使用mysqljs/mysql模块实现Node.js应用程序与MySQL数据库的交互。

准备

  1. 准备Nodejs环境,Nodejs官网
  2. 准备MySQL数据库,MySQL官网

安装

mysqljs/mysql模块介绍

This is a Node.js module available through the npm registry.
This is a node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 100% MIT licensed.

在Node.js应用程序根目录,使用npm命令安装mysql模块

npm install mysql

使用

1. 连接数据库

step1:导入mysql模块

const mysql = require("mysql");

step2:调用createConnection()创建连接对象

// createConnection(config),config:Object|String 提供两种创建连接对象的方式
// config 详情参考 https://github.com/mysqljs/mysql#connection-options
// Object 传参方式
const conn = mysql.createConnection({
   
    host:"localhost",
    port:3306,
    user:"root",
    password:"1234qwer",
    database:"ex_test"
});

// String 传参方式,可读性差,不推荐
// URL格式的连接配置,如 mysql://user:pass@host/db?debug=true
const conn2 = mysql.createConnection("mysql://root:1234qwer@localhost:3306/ex_test?debug=true");

// 数据库连接配置,也可以使用如下方式进行配置
conn.config.database = "ex_test";

step3:调用conn.connect()建立连接

// connect()方法接受一个具有err参数的回调函数,如果发生任何错误,它将提供详细的错误
conn.connect(function (err){
   
    if(err){
   
        console.log(err.message);
    }else{
   
        console.log("---------------[conn.connect] succeed.---------------")
    }
})

step4:调用conn.query()操作数据库

// 对数据库的CRUD,都是用query()方法,后边再详细说明
conn.query("select 1",function (err,results){
   
    console.log(results);
})

step5:调用conn.end()关闭连接

// end()接受一个回调函数,并且会在query结束之后才触发,如果query出错,仍然会终止连接,错误会传递到回调函数中处理
conn.end(function (err){
   
    if(err){
   
        console.log(err.message);
    }else{
   
        console.log("---------------[conn.end] succeed.---------------")
    }
});
// 要立即强制连接,可以使用destroy()方法
// destroy()立即终止数据库连接,即使还有query没有完成,它不会像end()方法那样采取任何回调参数
conn.destroy();

2. 操作数据库

对数据库的操作(CRUD、建库、建表等),都是使用query()方法,该方法接收三个参数:
第1个参数:sql语句,或者option Object;
第2个参数:为sql语句中的占位符提供的值,是单个值,或多个值组成的数组,或对象;
第3个参数:回调函数,回调函数有3个参数(error,result,fields),error是发生错误时的错误信息,results是sql执行结果,fields是涉及的字段(如果有);

详情参考:https://github.com/mysqljs/mysql#performing-queries

2.1 创建库

// 创建数据库 nodejs_mysql_db(不存在时才创建)
let db_sql = "CREATE DATABASE IF NOT EXISTS `nodejs_mysql_db` DEFAULT CHARSET utf8;"
conn.query(db_sql,function (err,results){
   
    if(err){
   return console.log(err);}
    console.log(results.affectedRows);	// 如果不报错,无论是否已创建 results.affectedRows=1
})

2.2 创建表

// 创建数据表 student (不存在时才创建)
let tb_sql = `CREATE TABLE IF NOT EXISTS students (
    Sid INT(8) NOT NULL AUTO_INCREMENT,
    Sname VARCHAR(10) NOT NULL,
    Sage INT(11) DEFAULT NULL,
    Ssex VARCHAR(10) DEFAULT NULL,
    PRIMARY KEY (Sid)
) ENGINE=INNODB DEFAULT CHARSET=utf8;`
// 上边在创建数据库连接对象时,连接的database是ex_test,这里给切换到新建的nodejs_mysql_db数据库
conn.config.database = "nodejs_mysql_db";
conn.query(tb_sql,function (err,results){
   
    if(err){
   return console.log(err);}
    console.log(results);
})

2.3 新增数据

// 方式1:每个?占位符 代表1个列属性,使用数组方式传值,数组长度与占位符个数一致,数组的每个元素将依次传给?占位符
// Arrays are turned into list, e.g. ['a', 'b'] turns into 'a', 'b'
let sql_insert1 = "INSERT INTO students (Sname,Sage,Ssex) VALUES (?,?,?)";
let student1 = ["张敏","20","女"];
// console.log(mysql.format(sql_insert1,student1));		// 可以使用 mysql.format() 将sql语句转化为标准sql
let qr1 = conn.query(sql_insert1,student1,function (
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小青龍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值