前言

后端代码要实现对数据的存储、管理和维护,离不开工具数据库。
MySQL是市场上应用最广泛的开源免费数据库,非常建议学习。对于MySQL数据库介绍可以参考:安装教程,使用教程。本文的重点在express中远程使用数据库,用代码实现对MySQL中远程数据的增删改查。

一、使用mysql

若想在Node.js中操纵数据库MySQL,需要借助MySQL提供的官方包:mysql
① 安装第三方包mysql

npm install mysql

② 代码框架

// 1 引入mysql模块
const mysql = require('mysql');// 2 配置连接信息
const connection = mysql.createConnection({host: '127.0.0.1', // IP地址user: 'root', // 用户名 默认rootpassword: 'admin123', // 自己在MySQL中设置的密码database: 'my_db_01', // 数据库名字(不是表名)
})// 3 建立连接
connection.connect( (err) => {// 连接失败if (err) {console.error('error connecting: ' + err.stack);return;}// 连接成功console.log('connected as id ' + connection.threadId);
});// 4 增删改查
connection.query('SELECT 1 + 1 AS solution', (error, results, fields) => {if (error) throw error;console.log('The solution is: ', results[0].solution);
});// 5 断开连接
connection.end();

③ 增删改查
利用函数connection .query()函数,第一个值为sql语句,可以采用?占位,第二个值为数组(若只有一个,也可不写成数组),分别填充占位,第三个为回调函数。

const sqlStr = 'select ? from users where id = ?'
connection .query( sqlStr, [v1, v2], (err, results) => {} )

二、how to 增删改查

数据库my_db_01中表users的结构如下:id为主键,数字类型,唯一标识用户,在表中设置自增;status代表数据状态:0:未注销,1:注销,默认为0

1、查找数据

查找语句SELECT somedata FROM tablename

// 查询users表中的数据
connection.query('SELECT * FROME users', (err, results) => {if (error) {console.log(error);return;}console.log(results);
})

返回结果:数组

[RowDataPacket {    id: 1,    username: 'new_name',    password: '12345',    status: 0  },RowDataPacket {    id: 2,    username: 'ls',    password: 'abc123',    status: 0  },RowDataPacket {     id: 3,    username: 'xh',    password: '65321',     status: 1 },RowDataPacket {    id: 4,    username: 'kc',    password: 'hwiquod',    status: 1  }
]

2、添加数据

不同写法:
INSERT INTO tablename(列名…) VALUES(列值)
INSERT INTO tablename SET 列1 = 值1, 列2 = 值2,…

const user = {username: 'ss', password: '123456'};
// 构造sql字符串
const sqlStr = 'INSERT INTO users SET?';
// 操作数据库
connection.query(sqlStr, user, (error, results) => {if (error) {console.log(error);return;}if (results.affectedRows === 1) {console.log('新增数据成功');console.log(results);}
})

返回的results:对象

OkPacket {        fieldCount: 0,  affectedRows: 1, // 被影响的列数目insertId: 5,serverStatus: 2,warningCount: 0,message: '',protocol41: true,changedRows: 0
}

修改数据

UPDATE tablename SET 列1=值1 WHERE id = 1

const sqlStr = 'UPDATE users SET status = ? WHERE id = ?';
// 将id=2的用户状态设置为1
connection.query(sqlStr, [1, 2], (error, results) => {if (error) {console.log(error);return;}if (results.affectedRows === 1) {console.log('删除数据成功');console.log(results);}

返回results:对象

OkPacket {fieldCount: 0,affectedRows: 1,insertId: 0,serverStatus: 2,warningCount: 0,message: '(Rows matched: 1  Changed: 0  Warnings: 0',protocol41: true,changedRows: 0
}

删除数据

DELETE FROM tablename WHERE ...

const sqlStr = 'DELETE FROM users WHERE id = ?';
// 删除id=1的用户数据
connection.query(delsql, 1, (err, results) => {if(err) return console.log(err);if(results.affectedRows === 1 ){console.log('删除数据成功');console.log(results);}
})

返回results:对象

OkPacket {        fieldCount: 0,affectedRows: 1,insertId: 0,serverStatus: 2,warningCount: 0,message: '',protocol41: true,changedRows: 0
}

三、留心留心

① 一般不删除,删除了用户再想恢复怎么办。所以一般增加一个status字段,来标识用户状态,达到“虚假删除”的目的
② 一定要写where子语句,特别是在更新和删除表时,不写默认对所有行进行操作,会造成严重的后果。

从零开始Node.js—11mysql包的使用相关推荐

  1. (18) Node.js npm包管理工具

    一.npm概述 npm (Node Package Manager)是 Node.js 的包管理工具. 什么是包?包就是一坨代码,就是 Node.js 的第三方模块. 例如:JQuery模块,Boot ...

  2. Node.js之包管理npm

    Node.js之包管理npm 前言 一.node.js下载 二. node的更新和其他操作 二.npm基本使用 1. 查看是否安装成功 2. 查看是否有npm 3. npm其他命令 前言 npm是no ...

  3. Node.js「一」—— Node.js 简介 / Node.js 模块 / 包 与 NPM

    本文为 Node.js 系列笔记第一篇.文章参考:nodejs 教程 -- 大地:<深入浅出 Node.js>:阮一峰 nodejs 博客 文章目录 一.Node 简介 1. 简单介绍 2 ...

  4. Node.js——npm_包的概念与操作

    目录 一.包与npm 1.包 2.npm与下载包 二.在项目中安装包 1.初体验安装包 2.了解包的语义化版本规范 3.解决多人协作开发时的拉取问题--包管理配置文件 1.自定义配置文件 2.包管理配 ...

  5. Node js npm 包管理工具的基本使用

    初始化一个node项目 npm initnpm init -y 没有 -y 参数表示自定义一些参数 -y 参数表示默认选项 初始化项目之后就会多出一个 package.json 的文件 查找需要的包 ...

  6. 十次方需求分析与技术架构、Node.js、包资源管理器NPM、Webpack

    1 十次方需求分析与技术架构 1.1 十次方是个什么样的网站 <十次方>是程序员的专属社交平台,包括头条.问答.活动.交友.吐槽.招聘六大 频道.如图所示: 十次方名称的由来:2的10次方 ...

  7. node-serialport —— Node.js 串口数据读写包

    node-serialport 是一个 Node.js 的包,用来对串口数据进行读写操作. 基本示例代码: var SerialPort = require("serialport" ...

  8. node.js模块和包

    概念:模块(Module)和包(Package)是Node.js最重要的支柱.开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分.分装.然后组合起来.模块正式为了实现这种方式而诞生, ...

  9. node.js 安装及配置(hello world)及 node 的包管理器(npm)

    下载地址:Download | Node.js,无脑下一步安装即可: 安装时,会自动将 node 可执行文件路径添加进 Path 内,这样进入 cmd 命令行,以查看 node 的安装版本: > ...

最新文章

  1. 为什么集群要奇数_面试系列 redis数据删除amp;集群
  2. 计算机前端专业术语,学习计算机知识必须懂得50个专业术语
  3. 订阅基础:RSS、ATOM、FEED、聚合、供稿、合烧与订阅
  4. Boost:列出设备的测试程序
  5. 01、python数据分析与机器学习实战——python数据分析处理库-Pandas
  6. python之socket编程
  7. 防删库实用指南 | 只需一步,快速召回被误删的表
  8. 计算机环境安全服务未启动,windows10系统卡在“准备安全选项”如何解决
  9. Java语言对对象引用的4种方式
  10. 2015年10月26日作业
  11. 《Renewable Energy》论文格式
  12. ArduinoUNO实战-第十七章-火焰传感器
  13. php hapijs,hapi 起步
  14. 【STM32】HAL库 STM32CubeMX教程九---ADC
  15. java.lang.OutOfMemoryError异常及相关问题解决
  16. 嵌入式课程设计:socket通信模拟服务器客户端实现文件传送(基于c++语言)
  17. P2P: Tuning Pre-trained Image Models for Point Cloud Analysis with Point-to-Pixel Prompting
  18. 计算机电源寿命,影响电脑寿命的几个重要方面
  19. win10 LATEX 安装使用 支持前向 后向 (TeX Live 2021+VSCode【不需要额外下载PDF阅览器,不需要跟换任何路径】)
  20. Paper intensive reading (三):Interactions Between Food and Gut Microbiota: Impact on Human Health

热门文章

  1. 使用DMO遍历xml文件(将xml文件中要获取的内容存到ArrayList集合中再取出来)(DMO解析)
  2. cnc难还是java难,「柳师傅」做CNC编程还没搞清这个参数,就等于还没出徒...
  3. 创新模式驱动生产力提升,融云社交场景化 SDK 探索
  4. 三种主流的3D建模软件,建模小白必学,各自特点全面解析
  5. 650个常用网页图标PSD素材
  6. ffmpeg 合并多音轨的问题
  7. MYSQL数据库基础篇
  8. Redis面试题-Redis哨兵模式
  9. Mac电脑调整显示器显示对比度的方法
  10. Oracle EM 12c 如何切换备用的OMR数据库 - 1