NodeJS 5分钟 连接MySQL 增删改查

本文简介

本文主要讲解在 Node.js 里如何连接 MySQL ,并分别操作一下 增删改查


阅读本文前需要在你电脑里安装一下 MySQL ,最好再安装一个数据库管理工具。我使用的是 MySQL Workbench ,这是一款 MySQL 官方推出的管理工具。你也可以使用 Navicat ,这工具也挺好用的。





初始化项目

在实操之前,首先要有一个库,库是用来存放数据的。

需要注意的是安装 MySQL 时需要记住自己的账号密码,因为连接数据库时需要用到。

file


mysql 建库建表

建库

我使用的是 MySQL Workbench 的图形化界面来建库,你可以使用其他工具,都差不多的。


单击这个图标,然后输入库的名字,再点击 Apply 就能建库

file
file


当然,你也可以使用 SQL 语句建库

CREATE SCHEMA `myblog` ;


建表

创建一个用户表,表里有 id 、用户名(username)、密码(password)、昵称(nickname) 这几个字段。

file

展开 testdb ,右键 Tables ,选择 Create Table 进入创建表的界面


file


上面做了这几步操作:

  1. 设置表名。
  2. 添加字段。PK 是主键,NN 是不能为空,AI 是自增。
  3. 点击 Apply 创建表。


如果你不怕麻烦,也可以使用 SQL 语句建表

CREATE TABLE `testdb`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(20) NOT NULL,
  `password` VARCHAR(20) NOT NULL,
  `nickname` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`id`));
file

经过一番操作,表就创建好了。但此时表里没任何数据,接下来会用 Node.js 操作。


初始化 Node 项目

创建一个项目目录,我将其命名为 node-mysql-demo,然后初始化该项目

npm init -y

此时项目里会多一个 package.json 文件,证明初始化成功了。


安装 MySQL 依赖包

npm install mysql

使用上面这条命令安装 MySQL 依赖包。

安装完成后,项目里会多一个 node_modules 文件夹,并且 package.json 里会出现 mysql 以及所安装的版本号。


完成这两步就算是初始化完毕了。



连接 MySQL

在根目录创建 index.js 文件,然后输入以下代码:

const mysql = require('mysql') // 引入 mysql

// 配置连接项
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '123456',
  port: '3306',
  database: 'testdb'
})

// 执行连接操作
connection.connect()


上面的代码其实主要就3步:

  1. 引入 mysql
  2. 配置
  3. 连接,使用 connect() 方法


其中配置项分别是:

  • host:域。本地测试的话可以使用 localhost
  • user:用户。测试一般使用 root
  • password:密码。安装数据库时会配置的
  • port:端口。默认是3306
  • database:数据库。输入要连接的数据库的名称即可



操作 MySQL

配置并启动连接 MySQL 后,就可以对数据库进行增删改查了。


增 insert

首先先新增几条数据

// 新增数据
const sql = `insert into users (username, password, nickname) values ('leihou', '123456', '雷猴');`

connection.query(sql, (err, result) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(result)
})


创建一条 SQL 语句,使用 insert into usersusers 表添加数据。这条语句其实很简单,翻译一下每个单词就能懂这条语句的内容。


最后使用 query() 方法执行操作。第一个参数是 SQL 语句;第二个参数是回调函数。


数据创建成功后,控制台会打印以下内容:

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

insertId 是插入的 IDaffectedRows 是受影响的行数。通常新增成功后,我们可以把 insertId 返回给前端。


查 select

我使用上面的 SQL 语句添加了3条数据

file

因为新增操作比较简单,我就不重复演示了。


查询的操作其实是最繁多的,接下来会一个一个介绍。

查询所有数据

const sql = `select * from users;`

connection.query(sql, (err, result) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(result)
})

* 代表要查询所有字段。from users 表示要查询 users 表。

此时返回的结果如下所示

[
  RowDataPacket {
    id: 1,
    username: 'leihou',
    password: '123456',
    nickname: '雷猴'
  },
  RowDataPacket {
    id: 2,
    username: 'shark',
    password: '123456',
    nickname: '鲨鱼辣椒'
  },
  RowDataPacket {
    id: 3,
    username: 'cockroach',
    password: '123456',
    nickname: '蟑螂恶霸'
  }
]


查询指定字段

// 省略部分代码
const sql = `select id, username from users;`

返回结果:

[
  RowDataPacket { id: 1, username: 'leihou' },  
  RowDataPacket { id: 2, username: 'shark' },   
  RowDataPacket { id: 3, username: 'cockroach' }
]


条件查询

// 省略部分代码

// 条件查询,使用 where
const sql = `select * from users where username='shark';`

// 与(查询username=shake,且nickname='鲨鱼辣椒')
const sql = `select * from users where username='shark' and nickname='鲨鱼辣椒';`

// 或(查询username='shark' 或 username='leihou')
const sql = `select * from users where username='shark' or username='leihou';`

// 非(查询 username 不等于 'shark')
const sql = `select * from users where username<>'shark';`


模糊查询

模糊查询的关键字是 like

const sql = `select * from users where username like '%o%';`

这个语句的意思是把 usernameo 的数据都查出来


正序

通过指定字段排序,默认是正序(从小到大排列),也可以添加关键字 asc

排序的操作是使用 order by 来指定字段。

const sql = `select * from users order by id asc;`


倒序

倒序使用 desc 关键字。

const sql = `select * from users order by id desc;`

此时就通过 id 字段的倒序进行排列。


改 update

如果要修改数据,可以使用 update

比如我想将 雷猴username 修改成 monkey

const sql = `update users set username='monkey' where nickname='雷猴';`

connection.query(sql, (err, result) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(result)
})


修改完,返回数据如下:

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

affectedRows 受影响的函数是1行。


此时查询一下数据,可以发现数据修改成功了。

file


删 delete

真实项目开发应该很少使用到删除。如果需要删除一个用户,通常是修改用户的某个字段,做成“软删除”的效果。

但还是需要知道如何删除数据库的真实内容,所以学吧~


删除 id3 的数据

const sql = `delete from users where id='3';`

connection.query(sql, (err, result) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(result)
})

使用 delete 关键字,并且用 where 指定要操作 id=3 的数据。

删除成功后,控制台会输出:

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


以上就是 Node.js 操作 MySQL 的入门过程。


关闭连接

最后如果操作完数据库,可以使用 end() 方法关闭与 MySQL 的连接。

// 关闭连接
connection.end()



推荐阅读

学完本章,再配合 《node http请求》 里的操作,就可以写一些简单的接口了。


👍《node http》

👍《console.log也能插图》

👍《前端需要的免费在线api接口》

👍《『前端必备』本地数据接口 —— json-server 从入门到膨胀》

点赞 + 关注 + 收藏 = 学会了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容