(一)Node.js 连接 mysql 数据库

安装 Mysql 数据库

下载安装包

安装地址:https://dev.mysql.com/downloads/mysql/
下载安装包,解压到磁盘,随便哪个磁盘都可以。

配置环境变量

新建-> 变量名:MYSQL_HOME,变量值:D:\mysql-8.0.18-winx64


配置MSql 配置文件

D:\mysql-8.0.18-winx64这个目录下新建一个my.ini文件,写入如下配置信息:

[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\\mysql-8.0.18-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\\mysql-8.0.18-winx64\\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

生成data文件

以管理员的身份打开cmd,进到这个目录下 D:\mysql-8.0.18-winx64\bin,执行以下命令
mysqld --initialize-insecure --user=mysql

安装mysql

继续执行以下命令
mysqld -install
显示 Service successfully installed.

启动服务

net start mysql


显示服务没有启动起来,打开服务看一下,按住window标志+r,输入services.msc

找到mysql,启动一下:

如果启动失败,找到本地安装了其他的php集成环境,先将这些服务停止:

在启动即可成功。

再重新命令行启动 net start mysql,可以看到服务启动成功了。

image.png

登录mysql

初始mysql的登录名是root,密码是空,运行命令mysql -u root -p,直接回车,


可以看到进去到mysql的命令行界面了。
现在开始设置用户名和密码,由于我下载的是新版本,所以新版本的语法变了,不能使用以前的方式,新语法如下 ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';,将root用户的密码设置成123456,返回成功。mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.07 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.08 sec)

退出mysql

quit

再重新登录mysql

mysql -u root -p
回车输入密码123456,


登录成功。

查看当前的状态

输入status

mysql> status
--------------
mysql  Ver 8.0.18 for Win64 on x86_64 (MySQL Community Server - GPL)

Connection id:          18
Current database:
Current user:           root@localhost
SSL:                    Cipher in use is TLS_AES_256_GCM_SHA384
Using delimiter:        ;
Server version:         8.0.18 MySQL Community Server - GPL
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 2 hours 31 min 20 sec

Threads: 2  Questions: 20  Slow queries: 0  Opens: 125  Flush tables: 3  Open ta
bles: 45  Queries per second avg: 0.002
--------------

可以看到当前的用户是root@localhost 端口是3306 当前的数据库为空。

简单的sql操作

显示所有数据库

show databases;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.34 sec)

创建数据库 使用数据库

create database koa_test;
use koa_test;

mysql> create database koa_test;
Query OK, 1 row affected (0.37 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| koa_test           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use koa_test
Database changed
mysql> status;
--------------
mysql  Ver 8.0.18 for Win64 on x86_64 (MySQL Community Server - GPL)

Connection id:          21
Current database:       koa_test
Current user:           root@localhost
SSL:                    Cipher in use is TLS_AES_256_GCM_SHA384
Using delimiter:        ;
Server version:         8.0.18 MySQL Community Server - GPL
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 20 hours 9 min 56 sec

Threads: 2  Questions: 30  Slow queries: 0  Opens: 143  Flush tables: 3  Open ta
bles: 63  Queries per second avg: 0.000

mysql> create table domain(id int NOT NULL auto_increment, name char null, statu
s int null, PRIMARY KEY (id));
Query OK, 0 rows affected (2.97 sec)
//创建表,查询表
mysql> SELECT * FROM domain;
Empty set (0.37 sec)
--------------

插入数据,查询数据

mysql> INSERT INTO `domain` (id, name, status) VALUES (null, 'n', 402);
Query OK, 1 row affected (1.44 sec)

mysql> INSERT INTO `domain` (id, name, status) VALUES (null, 'a', 400);
Query OK, 1 row affected (0.33 sec)

mysql> SELECT * FROM domain;
+----+------+--------+
| id | name | status |
+----+------+--------+
|  1 | n    |    402 |
|  2 | a    |    400 |
+----+------+--------+
2 rows in set (0.02 sec)

mysql> SELECT status from domain where status=400;
+--------+
| status |
+--------+
|    400 |
+--------+
1 row in set (0.10 sec)

Node 连接操作数据库

先处理执行 Node.js 代码连接报错问题

Node 在链接数据库的时候报错: Client does not support authentication protoc ol requested by server; consider upgrading MySQL client

出现上述问题的原因是:mysql8 之前的版本中加密规则是 mysql_native_password,而在 mysql8 之后,加密规则是 caching_sha2_password,把 mysql 用户登录密码加密规则还原成 mysql_native_password。
修改步骤如下:
1.查看MYSQL数据库中所有用户

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',''';') AS query FROM mysql.user;
+------------------------------+
| query                        |
+------------------------------+
| User: 'mysql.infoschema'@''; |
| User: 'mysql.session'@'';    |
| User: 'mysql.sys'@'';        |
| User: 'root'@'';             |
+------------------------------+
4 rows in set (2.51 sec)

2.修改加密规则,因为最新版的加密规则好像不一样,安装的过程当中是有提示的:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NE
VER;
Query OK, 0 rows affected (2.51 sec)

3..修改用户的认证规则:

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '1
23456';
Query OK, 0 rows affected (0.23 sec)

4.刷新权限:

mysql> flush privileges;
Query OK, 0 rows affected (0.28 sec)

5.重启mysql服务:

D:\mysql-8.0.18-winx64\bin>net stop mysql
MySQL 服务正在停止............
MySQL 服务已成功停止。

D:\mysql-8.0.18-winx64\bin>net start mysql
请求的服务已经启动。

再执行Node.js 连接数据库,并查询数据

新建一个项目koa-test

npm init -f
npm i mysql -S

新建server.js用来连接数据库

//server.js
const mysql = require('mysql');

const conn = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'koa_test'
})

conn.connect((err) => {
    if(err){
        throw err;
    }
    console.log('mysql 连接成功');
});

//插入数据
conn.query('insert into domain(name, status) values ("a", "500");', (error, result, fileds) => {
    if(error){
        throw error;
    }
    console.log('插入数据', result, '\n');
});

//删除数据
conn.query('delete from domain where id=4;',  (error, result, fileds) => {
    if(error){
        throw error;
    }
    console.log('删除数据', result, '\n');
});
//查询数据
conn.query('select * from domain;', (error, result, fileds) => {
    if(error){
        throw error;
    }
    let data = [];
    result.forEach(item => {
        data.push({
            id: item.id,
            name: item.name,
            status: item.status
        })
    });
    console.log('查询数据', data, '\n');
});
//关闭连接
conn.end();

执行 node server.js,可以看到数据库链接成功,查询语句的结果也返回了:

$ node mysql/server.js
mysql 连接成功
插入数据 OkPacket {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 8,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0 }

删除数据 OkPacket {
  fieldCount: 0,
  affectedRows: 0,
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0 }

查询数据 [ { id: 1, name: 'n', status: 402 },
  { id: 2, name: 'a', status: 400 },
  { id: 3, name: 'a', status: 500 },
  { id: 5, name: 'a', status: 500 },
  { id: 6, name: 'a', status: 500 },
  { id: 7, name: 'a', status: 500 },
  { id: 8, name: 'a', status: 500 } ]

看下数据库返回的结果:

D:\mysql-8.0.18-winx64\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| koa_test           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.12 sec)

mysql> use koa_test;
Database changed
mysql> select * from domain;
+----+------+--------+
| id | name | status |
+----+------+--------+
|  1 | n    |    402 |
|  2 | a    |    400 |
|  3 | a    |    500 |
|  5 | a    |    500 |
|  6 | a    |    500 |
|  7 | a    |    500 |
|  8 | a    |    500 |
+----+------+--------+
7 rows in set (0.00 sec)

参考:https://blog.csdn.net/qq_38455201/article/details/83024357

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