1, 下载 mysql 依赖 => npm -i mysql

2, 写一个核心工具类, 用于获取线程池连接 mysql-util.js

// 引入 mysql 数据库连接依赖
const mysql = require("mysql"); // 创建 mysql 连接池并配置参数
const pool = mysql.createPool({
host: "192.168.200.100", // 主机地址
port: 3306, // 端口
user: "root", // 数据库访问账号
password: "920619", // 数据库访问密码
database: "test", // 要访问的数据库
charset: "UTF8_GENERAL_CI", // 字符编码 ( 必须大写 )
typeCast: true, // 是否把结果值转换为原生的 javascript 类型
supportBigNumbers: true, // 处理大数字 (bigint, decimal), 需要开启 ( 结合 bigNumberStrings 使用 )
bigNumberStrings: true, // 大数字 (bigint, decimal) 值转换为javascript字符对象串
multipleStatements: false, // 允许每个mysql语句有多条查询, 未防止sql注入不开启
//connectTimeout: 5000, // 数据库连接超时时间, 默认无超时
});
pool.connectionLimit = 10; // 连接池中可以存放的最大连接数量
pool.waitForConnections = true; // 连接使用量超负荷是否等待, false 会报错
pool.queueLimit = 0; // 每个连接可操作的 列数 上限, 0 为没有上限 // 对外暴漏从连接池中获取数据库连接的方法
module.exports = function () {
return new Promise((resolve, reject) => {
pool.getConnection((err, conn) => {
if (err) {
console.log("数据库连接获取失败");
} else {
resolve(conn);
}
});
});
};

2, 执行简单的操作测试

// 引入工具类
let mysqlUtil = require("./mysql-util"); // 声明一个同步方法, 这里要求有 SQL 语句的基础
let ceshi = async function () {
// 获取连接, es6 新特性 awit 不能少
let conn = await mysqlUtil();
// 准备一个防 SQL 注入的 SQL 语句, 并准备参数
let sqlStr = "INSERT INTO user (UserName, UserSex) value (?, ?)";
let sqlParam = ["姓名", 1];
// 执行 SQL 语句并返回结果
conn.query(sqlStr, sqlParam, function (err, ret) {
console.log(ret);
     conn.release(); 
});
}; // 调用方法
ceshi();

3, 执行带事务的操作测试

// 引入工具类
let mysqlUtil = require("./mysql-util"); // 声明一个同步方法, 这里要求有 SQL 语句的基础
// 在 beginTransaction 和 commit 之间可以执行多次 query 方法
let ceshi = async function () {
// 获取连接
let conn = await mysqlUtil();
// 开启事物
await new Promise((resolve, reject) => {
conn.beginTransaction(err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
// 执行第一个 SQL 语句
let result1 = await new Promise((resolve, reject) => {
let sqlStr = "INSERT INTO user (UserName, UserSex) values (?, ?)";
let sqlParam = ["姓名2", 0];
conn.query(sqlStr, sqlParam, function (err, ret) {
if (err) {
// 回滚之前的数据库操作, 直至碰到 beginTransaction
return conn.rollback(() => {
resolve(err);
});
}
resolve(ret);
});
});
console.log(result1);
// 执行第二个 SQL 语句
let result2 = await new Promise((resolve, reject) => {
let sqlStr = "SELECT * FROM user";
//let sqlStr = "SELEC * FROM user"; // 错误的 SQL 语句
conn.query(sqlStr, function (err, ret) {
if (err) {
// 回滚之前的数据库操作, 直至碰到 beginTransaction
return conn.rollback(() => {
resolve(err);
});
}
resolve(ret);
});
});
console.log(result2);
// 关闭事务
await new Promise((resolve, reject) => {
conn.commit(err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
   conn.release();  
}; // 调用测试方法
ceshi();

Node 操作 MySQL 数据库的更多相关文章

  1. 你不会用node 操作mysql数据库吗?

    http://static.runoob.com/download/websites.sql这是实例 websites.sql文件1.安装node的mysql服务 npm install mysql ...

  2. Node 操作MySql数据库

    1, 需要安装 MySQL 依赖 =>  npm i mysql -D 2, 封装一个工具类 mysql-util.js // 引入 mysql 数据库连接依赖 const mysql = re ...

  3. node操作mysql数据库

    1.建立数据库连接:createConnection(Object)方法       该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php ...

  4. 使用node js 操作 Mysql 数据库

    使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...

  5. node使用MySQL数据库

    内容: 1.node连接数据库 2.数据库常用操作 3.数据库实例 - 用户注册.登陆 1.node连接数据库 (1)下载mysql模块 (2)使用mysql模块连接数据库 let db=mysql. ...

  6. PHP操作MySQL数据库5个步骤

    PHP操作MySQL数据库一般可分为5个步骤:1.连接MySQL数据库服务器:2.选择数据库:3.执行SQL语句:4.关闭结果集:5断开与MySQL数据库服务器连接. 1.用mysql_connect ...

  7. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  8. 转 用C API 操作MySQL数据库

    用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...

  9. PHP操作mysql数据库:[2]查询数据听语音

    本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料   Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言   ...

随机推荐

  1. [蓝桥杯]ALGO-97.算法训练_排序

    题目描述: 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. 输出格式:输出只有一行,即排序后的结果. 输入输出 ...

  2. SpringBoot工程+热部署进行远程调试

    本文转载自:https://blog.csdn.net/qq_31868349/article/details/78553901 SpringBoot工程+热部署进行远程调试 本地端添加配置 在pom ...

  3. Hadoop概念学习系列之再谈hadoop集群里的本地模式、伪分布模式和全分布模式(三十七)

    能看懂博主我此博文,相信你已经有了一定基础了. 对于本地模式.伪分布模式和全分布模式的概念,这里,我不多赘述.太多资料和博客,随便在网上一搜就好. 比如<hadoop实战 第二版>陆嘉恒老 ...

  4. java的应用包的方法,及调用类里面函数的原理

    selenium官网下载的selenium包 包导入eclipse 见:https://www.cnblogs.com/kaibindirver/p/10674604.html 代码

  5. Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用

    ylbtech-Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用 1.返回顶部 1. Java 实例 - Varargs 可变参数使用  Java ...

  6. WireGuard协议介绍

    原文: https://www.jianshu.com/p/32c3e62c2711

  7. [UE4]Break展开复杂数据结构

  8. Windows平台下使用CodeBlocks+GCC编译器生成动态dll,C#调用报错

    报无法加载dll错误,解决方法: 1) 编译选择设置成x86,即-m322) 必须在c#程序目录下加上libgcc_s_dw2-1.dll

  9. 00009 - cat、tail、head、tee、wc、sort文件操作和过滤

    绝大多数命令行工作是针对文件的.我们会在本节中讨论如何观察及过滤文件内容,使用一条命令从文件中提取所需信息,以及对文件的内容进行排序. cat.tail.head.tee:文件打印命令这些命令的语法基 ...

  10. Redis 穿透和雪崩

    Redis穿透 出现原因:频繁的查询一个不存在的数据,由于缓存不命中,每次都要查询持久层,从而失去缓存保护后端的意义 解决方法: 部署过滤器拦截: 将数据库中数据的存在的Id存入列表,放入缓存中,每次 ...