Skip to content

MySQL 小试牛刀

一、下载安装

官网下载地址:MySQL download

1.1 安装的步骤,基本上一路 Next 即可








1.2 配置环境变量(window)

1.找到 MySQL 安装路径(注意是 bin 文件下)
2.右键打开 "此电脑"属性,先点击 "高级系统设置",再点击 "环境变量"
3.在 "系统变量"中选择 "Path",点击 "编辑"
4.点击 "新建",将MySQL的安装路径添加上去,之后点击 "确定"
5.一路确定保存设置

二、建表

2.1 使用可视化工具:Navicat

2.2 建立 Test 表


三、具体使用

3.1 利用 koa 脚手架(koa-generator)初始化项目

js
// 1. 全局安装
$ npm install -g koa-generator

// 2. 初始化项目
$ koa2 -e koa2-bff

// 3. 下载安装依赖
$ npm i

// 4. 安装 mysql 等
$ npm i mysql axios
$ npm i cross-env -D

// 5. 添加配置: mysql等相关
// 5.1 修改 package.json
"scripts": {
  // 省略其他
  "dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
},

// 5.2 新建 conf 目录
// a) 新建 conf/controller/user.js
// b) 新建 conf/db/db.js 和 conf/db/mysql.js
// c) 新建 conf/model/resModel.js

// 5.3 调整 routes/user.js
// ======= 备注:5.2和5.3修改文件详见下文 =======

3.2 承接上文(5.2/5.3 新增和修改文件详情)

js
// conf/controller/user.js
const axios = require('axios')
const { exec } = require('../db/mysql')

// 获取百度美女图
const beautyList =
  'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=11675912631845458643&ipn=rj&ct=201326592&is=&fp=result&fr=ala&word=%E7%BE%8E%E5%A5%B3%E5%9B%BE&cg=girl&queryWord=%E7%BE%8E%E5%A5%B3%E5%9B%BE&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&expermode=&nojc=&isAsync=&pn=60&rn=30&gsm=3c&1670313780014='

//--------------------------------- USER LIST -------------------------------------------------------------
// 1、API:-- 获取用户列表
const userList = async (pageIndex) => {
  const resData = await axios.get(beautyList)
  let pageSize = 20
  let limitStart = pageSize * (pageIndex - 1)
  let sqlTotal = 'SELECT COUNT(*) as total FROM test_user WHERE 1=1 '
  let sql = `SELECT * FROM test_user WHERE 1=1 `
  sql += `ORDER BY id DESC `
  if (pageIndex) {
    sql += `LIMIT ${limitStart}, ${pageSize} `
  } else {
    sql += `LIMIT 0, 5 `
  }
  sql += ';'
  sqlTotal += ';'
  let rows = await exec(sqlTotal)
  return {
    total: rows[0].total || 0,
    list: await exec(sql),
    beautyList: resData.data.data || []
  }
}

module.exports = {
  userList
}
js
// conf/db/db.js
const env = process.env.NODE_ENV

// 配置
let MYSQL_CONF

if (env === 'dev') {
  MYSQL_CONF = {
    host: 'localhost',
    user: 'root',
    password: '******',
    port: '3306',
    database: 'bff_schema'
  }
}

if (env === 'production') {
  // MYSQL_CONF = {
  //   host: 'localhost',
  //   user: 'root',
  //   password: 'password',
  //   port: '3306',
  //   database: 'yuanbo_web'
  // }
}

module.exports = {
  MYSQL_CONF
}
js
// conf/db/mysql.js
const mysql = require('mysql')
const { MYSQL_CONF } = require('./db')

const mysqlConnect = mysql.createConnection(MYSQL_CONF)

// 开始连接
mysqlConnect.connect()

function exec(sql) {
  const promise = new Promise((resolve, reject) => {
    mysqlConnect.query(sql, (err, result) => {
      if (err) {
        reject(err)
        return
      }
      resolve(result)
    })
  })
  return promise
}

module.exports = {
  exec,
  escape: mysql.escape
}
js
// conf/model/resModel.js
class BaseModel {
  constructor(data, message) {
    if (typeof data === 'string') {
      this.message = data
      data = null
      message = null
    }
    if (data) {
      this.data = data
    }
    if (message) {
      this.message = message
    }
  }
}

class SuccessModel extends BaseModel {
  constructor(data, message) {
    super(data, message)
    this.code = 0
  }
}

class ErrorModel extends BaseModel {
  constructor(data, message) {
    super(data, message)
    this.code = -1
  }
}

module.exports = {
  SuccessModel,
  ErrorModel
}
js
// routes/user.js
const router = require('koa-router')()
// 引入 API 列表
const { userList } = require('../conf/controller/user')
const { SuccessModel, ErrorModel } = require('../conf/model/resModel')

router.prefix('/users')

router.get('/', async function (ctx, next) {
  ctx.body = 'this is a users response!'
  const body = ctx.request.body
  let { pageIndex = 1 } = body
  const listData = await userList(pageIndex)
  ctx.body = new SuccessModel(listData)
})

router.get('/bar', function (ctx, next) {
  ctx.body = 'this is a users/bar response'
})

module.exports = router

3.3 浏览器访问 localhost:3000/users/ 即可得到如下数据


四、常见问题

4.1 koa/Express 无法连接 MySQL(throw err// Rethrow non-MySQL errors)

原因:MySQL8.0.4 以前 MySQL 的密码认证插件是 "mysql_native_password",而现在使用的是 "caching_sha2_password"。

js
// 进入mysql 输入密码例如:123456
mysql -u root -p

// 1.执行语句 alter user 'root'@'localhost' identified with mysql_native_password by 密码;
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.43 sec)

// 2.再执行语句 flush privileges;
mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)

//3.成功后 退出
mysql> quit
Bye

4.2 cmd 中输入 net start mysql 提示:服务名无效或者 MySQL 正在启动 MySQL 无法启动

js
// 1. DOS窗口需要定位路径在 MySQL 的安装路径下 (特别注意:需要 “管理员身份运行”)
cd C:\Program Files\MySQL\MySQL Server 8.0\bin

// 2. 运行 mysqld --install
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysqld --install
Service successfully installed.

// 3. 运行 mysqld --initialize:删除mysql下的data文件,重新执行 mysqld --initialize 就可以在当前路径下生成data文件夹
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysqld --initialize

// 4. 运行 MySQL:启动mysql
C:\Program Files\MySQL\MySQL Server 8.0\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

参考:
navicat 官网
最新 MySql 安装教学,非常详细