连接并新建本地数据库

打开 workbench ,点击按钮连接数据库


浏览器怎么连接mysql数据库 mysql数据库连接网页_数据库

填写数据库名称,其它默认即可


浏览器怎么连接mysql数据库 mysql数据库连接网页_数据库_02

点击此处填写密码


浏览器怎么连接mysql数据库 mysql数据库连接网页_git_03

填写安装时候设置的密码,然后点击 ok


浏览器怎么连接mysql数据库 mysql数据库连接网页_mysql_04

点击测试一下连接


浏览器怎么连接mysql数据库 mysql数据库连接网页_浏览器怎么连接mysql数据库_05

显示 successfully 就是成功了


浏览器怎么连接mysql数据库 mysql数据库连接网页_mysql_06

关闭弹窗,点击 ok


浏览器怎么连接mysql数据库 mysql数据库连接网页_mysql_07

这就是我们刚刚添加的数据库了,点击就可以查看


浏览器怎么连接mysql数据库 mysql数据库连接网页_javascript_08

点击这个图标进行数据库的添加


浏览器怎么连接mysql数据库 mysql数据库连接网页_git_09

输入数据库名称,选择编码方式,点击 apply


浏览器怎么连接mysql数据库 mysql数据库连接网页_git_10

继续点击 apply


浏览器怎么连接mysql数据库 mysql数据库连接网页_javascript_11

点击 finish


浏览器怎么连接mysql数据库 mysql数据库连接网页_git_12

点击这里 ,就可以看到刚才新建的数据库了


浏览器怎么连接mysql数据库 mysql数据库连接网页_数据库_13

这就是刚新建的数据库


浏览器怎么连接mysql数据库 mysql数据库连接网页_浏览器怎么连接mysql数据库_14

右键新建的数据库,点击 Set as Default Schema 设置为此次连接的默认数据库。


浏览器怎么连接mysql数据库 mysql数据库连接网页_javascript_15

使用 mysql2 测试数据库连接

安装 mysql2

npm i mysql2 sequelize -S

数据库配置文件

// src\config\envs\dev.js

module.exports = {// mysql 的配置mysqlConfig: {host: 'localhost',user: 'root',password: 'xiaowei123',port: '3306',database: "imooc_logo_course"}
}

mysql2 连接测试

// src\db\mysql2.js

const mysql = require('mysql2/promise')
const { mysqlConfig } = require('../config/envs/dev')

// mysql2 连接测试
async function testMysqlConn() {const connection = await mysql.createConnection(mysqlConfig)const [rows] = await connection.execute('select now();')return rows
}

// 可直接执行 node src/db/mysql2.js 进行测试
; (async () => {const rows = await testMysqlConn()console.log('🚀🚀 ~ rows', rows);
})()

module.exports = testMysqlConn

控制台执行 node src/db/mysql2.js ,打印当前时间说明数据库连接测试成功


浏览器怎么连接mysql数据库 mysql数据库连接网页_mysql_16

然后我们来写一个路由进一步测试

// src\routes\index.js

const router = require('koa-router')()
const packageInfo = require('../../package.json')
const testMysqlConn = require('../db/mysql2')
const ENV = require('../utils/env')

// 测试数据库连接
router.get('/api/db-check', async (ctx) => {// 测试 mysql 数据库连接const mysqlRes = await testMysqlConn()ctx.body = {errno: 0,data: {name: 'biz editor server',version: packageInfo.version,ENV,mysqlConn: mysqlRes.length > 0}}
})

module.exports = router
// src\utils\env.js

// 环境变量
const ENV = process.env.NODE_ENV || ''
module.exports = {ENV,isPrd: ENV === 'production',isPrdDev: ENV === 'prd_env',idDev: ENV === 'dev',isTest: ENV.indexOf('test') === 0,isTestLocal: ENV === 'test_local',isTestRemote: ENV === 'test_remote'
}

执行 npm run start 把服务开启,然后访问 http://localhost:3000/api/db-check,结果如下,说明服务器连接成功了。


浏览器怎么连接mysql数据库 mysql数据库连接网页_git_17

使用 Sequelize 测试数据库连接

配置 sequelize ,连接 mysql

// src\db\seq\seq.js

const Sequelize = require("sequelize")
const { mysqlConfig } = require('../../config/envs/dev')
const { isPrd, isTest } = require('../../utils/env')

// 连接配置
const { database, user, password, host, port } = mysqlConfig
const conf = {host,port,dialect: 'mysql'
}

// 测试环境不打印日志
if (isTest) {conf.logging = () => { } // 默认是 console.log
}

// 线上环境使用连接池
if (isPrd) {conf.pool = {max: 5, // 连接池中最大连接数量min: 0, // 连接池中最小连接数量idle: 1000, // 如果一个线程 10s 内没有被使用过的话, 就释放线程}
}

// 创建连接
const seq = new Sequelize(database, user, password, conf)

module.exports = seq

数据库连接测试

// src\db\seq\utils\conn-test.js

const seq = require('../seq')

// 测试连接, 直接运行 node src/db/seq/utils/conn-test.js
seq.authenticate().then(() => {console.log('🚀🚀 ~ ok');}).catch(() => {console.log('🚀🚀 ~ fail',);}).finally(() => {console.log('🚀🚀 ~ finally',);process.exit()})

控制台执行 node src/db/seq/utils/conn-test.js ,打印 ok 说明数据库连接测试成功


浏览器怎么连接mysql数据库 mysql数据库连接网页_浏览器怎么连接mysql数据库_18

模型和数据表的同步

需要在服务启动之前同步数据库,然后再启动服务

// bin\www

var syncDb = require('../src/db/seq/utils/sync-alter.js')

// 先同步 mysql 数据表
syncDb().then(() => {server.listen(port);server.on('error', onError);server.on('listening', onListening);
})

同步数据库的业务代码,以修改数据表的方式,不会清空数据,比较安全

// src\db\seq\utils\sync-alter.js

const path = require('path')
const simpleGit = require('simple-git')
const seq = require('../seq')
const { isDev } = require('../../../utils/env')

// 获取所有 seq model
require('require-all')({dirname: path.resolve('src', 'models'), // src/models 中可能会有 mongoose 的 model ,不过这里获取了也没关系filter: /\.js$/,excludeDirs: /^\.(git|svn)$/,recursive: true, // 递归
})

// 同步数据表
async function syncDb() {let needToSyncDb = true// 只适用于开发环境!!!if (isDev) {// 开发环境下,修改频繁,每次重启都同步数据表,消耗太大// 所以,开发环境下,判断是否修改了 src/models 中的内容?// 如果是,则同步数据表。否则,不用同步数据表。const git = simpleGit()// 获取 git status 修改的文件,modified 格式如[ '.gitignore', 'package.json', 'src/models/README.md' ]const { modified, not_added: nodeAdded, created, deleted, renamed } = await git.status()const fileChanged = modified.concat(nodeAdded).concat(created).concat(deleted).concat(renamed)if (fileChanged.length) {// 到此,说明 git status 有改动// 是否改动了 db 相关的文件const changedDbFiles = fileChanged.some(f => {// 改动了 src/models ,需要同步数据库if (f.indexOf('src/models/') === 0) return true// 改动了 src/db/seq ,需要同步数据库if (f.indexOf('src/db/seq/') === 0) return true// 其他情况,不同步return false})// 没改动 db 文件,则不需要同步if (!changedDbFiles) needToSyncDb = false}// 如果 git status 没有改动,则照常同步数据表,重要!!!}if (needToSyncDb) {await seq.sync({ alter: true })}
}

module.exports = syncDb

创建数据模型

封装 sequelize 类型

// src\db\seq\types.js
const Sequelize = require('sequelize')

module.exports = {STRING: Sequelize.STRING, // VARCHAR(255)TEXT: Sequelize.TEXT, // TEXTINTEGER: Sequelize.INTEGER,BOOLEAN: Sequelize.BOOLEAN,DATE: Sequelize.DATE,
}

测试创建一个 user module

// src\models\UserModel.js

const seq = require('../db/seq/seq')
const { STRING, DATE, BOOLEAN } = require('../db/seq/types')

const User = seq.define('user', {username: {type: STRING,allowNull: false,unique: 'username', // 不要用 unique: true, https://www.chaoswork.cn/1064.htmlcomment: '用户名,唯一',},password: {type: STRING,allowNull: false,comment: '密码',},phoneNumber: {type: STRING,allowNull: false,unique: 'username',comment: '手机号,唯一',},nickName: {type: STRING,comment: '昵称',},gender: {type: STRING,allowNull: false,defaultValue: 0,comment: '性别(1 男性,2 女性,0 保密)',},picture: {type: STRING,comment: '头像,图片地址',},city: {type: STRING,comment: '城市',},latestLoginAt: {type: DATE,defaultValue: null,comment: '最后登录时间',},isFrozen: {type: BOOLEAN,defaultValue: false,comment: '用户是否冻结',},
})

module.exports = User

执行 npm run dev, 启动服务


浏览器怎么连接mysql数据库 mysql数据库连接网页_git_19

可以看到这个时候数据库已经有 users 表了。


浏览器怎么连接mysql数据库 mysql数据库连接网页_mysql_20