你学废了吗:node使用mysql

如果要接触后端,数据库肯定是必不可少的内容。作为nodejs的开发者,node优秀的mysql框架也不少,例如:Bookshelf、Sequelize、Typeorm等等。本文介绍下nodejs中mysql的基础用法。

mysql安装

不管你的系统是windows、mac还是Linux,通过源码编译、工具安装、安装包安装等方法都可以完成。不过呢,这些方式安装还是比较麻烦,中间还容易出错导致问题,而且如果搞出问题想要卸载也麻烦。所以今天我们换一个简单的方法:使用docker。

安装docker

个人PC的直接下载安装包安装docker桌面版即可:www.docker.com/products/do...

docker安装mysql

docker安装成功后,打开docker,待docker启动成功后,打开命令行工具,开始安装mysql。

获取mysql的镜像

使用search命令查看可用的mysql镜像

shell 复制代码
docker search mysql

这个命令可以检索出关键字相关的镜像

如果需要特定版本的mysql镜像,也可以在mysql的镜像列表中查找:hub.docker.com/_/mysql?tab... 打开tags标签,可以挑选需要的mysql版本

拉取镜像

我这里对mysql的版本没有需求,直接拉取最新版本:

shell 复制代码
docker pull mysql:latest

pull成功后,查看mysql是否已经拉取成功:

shell 复制代码
docker images

创建容器

使用下面的命令启动mysql容器:

css 复制代码
docker run --name local-mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 -ti mysql

简单解释该命令:

  • run 创建容器
  • --name 容器的名,这里命名为local-mysql
  • -p 将主机的端口与容器的端口映射,这里将主机的13306端口映射到容器的3306端口(3306端口为mysql的默认端口)
  • -e 设置环境变量,这里设置MYSQL_ROOT_PASSWORD值为123456,这个变量是设置mysql的root账号的密码
  • -it 以交互模式运行容器,并为其分配一个伪的输入终端
  • mysql 使用mysql的镜像

执行成功后,可以再docker桌面端看到对应的容器

创建database

先打开mysql容器,直接在docker桌面端,点击输入终端的按钮直接打开容器终端:

也可以使用命令行打开:

shell 复制代码
docker exec -it local-mysql bash

进入mysql

shell 复制代码
mysql -u root -p

根据提示输入密码,进入mysql:

创建database

现在创建一个名为demo的库:

sql 复制代码
CREATE DATABASE demo  
CHARACTER SET 'utf8mb3'
COLLATE 'utf8mb3_general_ci';  

这个命令的意思是创建一个DATABASE,名为demo,字符集(字符数据类型)使用utf8mb3编码(utf8编码,支持存储3个字节长的字符),排序规则为utf8mb3_general_ci,其中"general"表示使用一般的排序规则,"ci"表示不区分大小写。

好了,数据库搞定了,现在可以开始操作。

nodejs操作mysql

安装mysql模块

执行安装命令:

shell 复制代码
npm install mysql

连接数据库

代码简单如下:

js 复制代码
const mysql = require('mysql');
// 创建连接
const connection = mysql.createConnection({
  host: 'localhost',
  port: 13306,
  user: 'root',
  password: '123456',
  database: 'demo'
});

// 连接数据库
connection.connect((err) => {
  if (err) {
    console.error('Mysql连接失败: ', err);
    return;
  }
  console.log('Mysql连接成功');
});

// 使用完毕,关闭连接
connection.end((err) => {
  if (err) {
    console.error('Mysql连接关闭失败', err);
    return;
  }
  console.log('Mysql连接成功');
});

执行代码,报错: 这个错误的问题产生的原因是:Mysql8使用的是'caching_sha2_password'的密码加密方式,而最新的node mysql模块并没有支持这个加密方式。 在docker终端可以查看mysql的版本:

解决连接报错

这个问题的解决办法有两个:

  • 安装8以下的mysql版本
  • 执行一下命令:
sql 复制代码
USE mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

打开mysql库,将root用户的密码加密方式修改为:mysql_native_password。 重新执行代码,连接成功。

建表

我们先创建一个用户表:

sql 复制代码
CREATE TABLE `user` (
  `id` INT(4) PRIMARY KEY AUTO_INCREMENT,
  `account` varchar(60) DEFAULT NULL COMMENT '用户账号',
  `password` varchar(100) DEFAULT NULL COMMENT '密码',
  `mobile` varchar(11) DEFAULT NULL COMMENT '手机号',
  `created_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modified_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户表';

CURD

添加用户

js 复制代码
connection.query(
  'insert into user set ?', 
  {account: 'a', password: '123', mobile:'12345678911'}, 
  (error, results, fields) => {
    if (error) throw error;
    console.log('插入用户成功: ', results);
  }
);

执行:

mysql模块本身没有提供批量插入的方式,如果想一次插入多条数据,可以这么写:

js 复制代码
connection.query(
  "insert into user(`account`, `password`, `mobile`) values ('b', '123', '12345678912'),('c', '123', '12345678912');", 
  (error, results, fields) => {
    if (error) throw error;
    console.log('插入用户成功: ', results);
  }
);

查询用户

js 复制代码
connection.query(
  'select * from user', 
  (error, results, fields) => {
    if (error) throw error;
    console.log('查询结果: ', results);
  }
);

获得查询结果:

结果里面的RowDataPacket是mysql模块查询返回的特定格式的对象,通常是只读的。简单点可以操作对象一样:

js 复制代码
results.forEach(item => {
  console.log(item.id);
  console.log({ ...item});
});

如果不想要这个格式,那就JSON.parse(JSON.stringify(results))转化一下。

更新用户

我们将id为1的用户的手机号改为12345678922

js 复制代码
connection.query(
  'update user set mobile = ? WHERE `id` = ?', 
  ['12345678922', 1],
  (error, results, fields) => {
    if (error) throw error;
    console.log('更新结果: ', results);
  }
);

查询下数据

sql 复制代码
select * from user where id = 1;

删除用户

把id为2的用户删除:

js 复制代码
connection.query(
  'delete from  user WHERE `id` = ?', 
  [2],
  (error, results, fields) => {
    if (error) throw error;
    console.log('删除结果: ', results);
  }
);

总结

本文是对使用mysql的简单用法总结,如果觉得写的还行,请点赞收藏鼓励下,后续我会带来更多关于node数据库的内容。

相关推荐
Fleshy数模7 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao8 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q9 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子1310 小时前
MySQL用户管理(十三)
数据库·mysql
Dxy123931021610 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋10 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣5010 小时前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
人道领域11 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
千寻技术帮12 小时前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot
spencer_tseng12 小时前
MySQL table backup
mysql