MySQL(一)数据库管理及node连接踩坑指南

本文详细介绍了MySQL8.0的安装、配置、使用流程,包括数据库和数据表的创建、修改、删除,以及用户权限的设置。特别针对MySQL8的加密规则调整,提供了node.js连接MySQL的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在学校学习的是sqlserver2008,后来又在亚信实习使用Oracle,近期因为毕设项目,我选择了火热的MySQL,一下是使用中的一些记录;
MySQL的安装与初始化有许多教程,不在赘述;
使用MySQL8.0

开始使用MySQL

  1. 登陆本机的数据库,在本机的命令行输入:mysql -u root -p,然后回车并输入密码,不出意外就成功连接上了数据库;(一般登陆数据库使用mysql -h 主机名 -u 用户名 -p
  2. 修改密码:在正式使用之前,MySQL要求必须使用初始密码,然而该版本修改密码时,许多命令都提示语法不符合该版本;经历了无数多尝试之后,使用ALTER user 'root'@'localhost' IDENTIFIED BY 'root';终于修改成功。(mysql要求每句命令必须有分号:,不然就认为该指令未结束)
  3. 在正式开始使用之前,使用SHOW DATABASES;查看有哪些数据库;(information_schema、mysql、performance_schema和sys是系统库,不要去改动它们。

数据库操作

  1. 然后我们创建一个数据库:CREATE DATABASE product;(此处及以下以我实际项目为例)
    删除一个数据库使用DROP DATABASE 数据库名;命令,该数据库下的所有表都会被删除;
  2. 接着,对该数据库进行操作,切换到该数据库内:USE product;

数据表操作

  1. 切换到某个数据库(我这里是product)后,查看该数据库下的所有数据表SHOW TABLES;
  2. 首先我们创建一个用户表user,用来存放服务器上所有用户的账号,密码:
 CREATE TABLE user(
     user_id INT  NOT NULL AUTO_INCREMENT,    //定义列自增,用于主键
     user_name VARCHAR(100) NOT NULL,
     user_password VARCHAR(40) NOT NULL,
     submission_date DATE,   //提交的时间
     PRIMARY KEY(user_id)   //设置主键
     )ENGINE=InnoDB DEFAULT CHARSET=utf8;  //ENGINE 设置存储引擎,CHARSET 设置编码。

删除一个数据表可以使用:DROP TABLE user;
8. 修改一个表的结构:

//  增加一个列名:
ALTER TABLE user ADD COLUMN age VARCHAR(10) NOT NULL;
//修改增加的age列,把列名改为birth:
ALTER TABLE user CHANGE COLUMN age birth VARCHAR(20) NOT NULL;
//  删除列birth:
ALTER TABLE userDROP COLUMN birth;
  1. 如果要查看一个表的结构,使用DESC user,甚至我们可以查看创建该表的语句SHOW CREATE TABLE user;

node连接MySQL

  1. 在这里,我新添加了一个用户,用于对nodjs的连接并控制其权限:
//  使用mysql 数据库
USE mysql
//  为mysql创建用户:nodejs 密码为:password12345
CREATE USER nodejs IDENTIFIED BY 'password12345';
//  查看下用户nodejs的权限
SELECT *  FROM USER WHERE USER='nodejs' ;
SHOW GRANTS FOR nodejs;
//  给用户nodejs在数据库名为product上赋INSERT,SELECT,UPDATE权限,@'%'表示从任意ip都可以访问到这个数据库
GRANT EXECUTE,INSERT,SELECT,UPDATE ON nodejs.* TO 'case_dev'@'%';
//  生效
FLUSH PRIVILEGES;
//  再次查询 下权限
SELECT *  FROM USER WHERE USER='nodejs' ;
SHOW GRANTS FOR nodejs;
  1. 安装mysql模块:npm install mysql
  2. 连接mysql
    const mysql = require('mysql');
    let connection = mysql.createConnection({
        host : 'localhost',
        user : 'nodejs', 
        password : 'password12345',
        database : 'product'
    });

connection.connect(function(err) {
   if (err) {
       console.error('连接失败: ' + err.stack);
       return;
   }
   console.log('连接成功 id ' + connection.threadId);
});

connection.end(function(err) {  //结束连接
});

此处有坑:

  1. 运行此代码后,弹出Unhandled rejection Error: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client错误,大概意思就是未处理拒绝错误:错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议; 考虑升级MySQL客户端,经过一番艰苦卓越,才搞清楚是因为MySQL8默认是严格加密模式,于是,修改加密规则为普通模式
  2. 进入root用户权限下,修改加密规则:ALTER USER 'nodejs'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;,然后更新密码(可省略):ALTER USER 'nodejs'@'%' IDENTIFIED WITH mysql_native_password BY 'password';,在刷新一下权限就好了:FLUSH PRIVILEGES;
  3. 注意: 在填坑的修改加密规则处'nodejs'@'%',其中%要与系统用户表的host字段值相同,忘记创建用户时设的值,可以输入use mysql;select user,host from user;命令查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值