mysql环境配置以及搭配 sequelize 使用

2,050 阅读4分钟

使用sequelize的好处是它可以帮我们把关系数据库的表结构映射到对象上,从而使对sql语句不太懂的同学上手起来也不那么困难。

之所以单独开一篇来讲sequelize,是防止有些同学没有接触过sequelize,后续会搭配放百度云这项目去使用哟。

好了话不多说,马上开始。

本篇涉及到的技术:

  1. mysql
  2. sequelize
  3. express

window端 mysql环境配置(已有环境的可以跳过)

1.去mysql官网下一个mysql,下载完成后将其解压到自定义目录下。

2.随后,配置环境变量(我的电脑点右键,然后点属性,然后点击环境变量),步骤如下:

image.png

image.png

此时,环境变量配置完成,接下来进行安装mysql的操作。

3.在安装目录下创建一个my.ini文件,文件内容如下:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=E:\\Program Files\mysql-8.0.21-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\\Program Files\mysql-8.0.21-winx64\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

4.用管理员身份打开cmd窗口,然后先给mysql服务创建名称(方便到时候建立多个mysql服务时不冲突)

mysqld --install mysql1

5.初始化mysql

sqld --initialize --console

记住初始化localhost后面跟着的那串字符串 image.png

假如没记住,把根目录下生成的data删掉,删掉,然后在初始化一次.

有些人会出现140.dll的错误,那是缺少了vc++的运行库,这里有下载地址

6.启动服务

net start mysql1

启动成功之后我们就可以登进去看看了

mysql -uroot -p

弹出需要你输入密码,你就输入第五步的初始化生成的那串字符串,输入回车之后输出这样的日志,就证明登录成功了

image.png

7.修改初始化密码

ALTER USER 'root'@'localhost' identified by '新密码' ; 

8.测试工具测试

image.png

mysql基本配置

使用express创建一个项目,并且安装mysql,创建库在可视化navicat 工具上创建一个库名为disc

express mysqltx

cd mysqltx

npm i

npm i mysql -S

mysql创建连接对象API createConnection(options)

options基本配置对象有

  1. host: 主机
  2. user: 数据库账号
  3. password:密码
  4. database:数据库名称

我们在根目录下新增db目录,并且创建config.js、index.js两个文件,并且写两个查询语句

config.js

module.exports = {
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'disc'
}

index.js

const mysql = require('mysql')
const config = require('./index')
// const {debug} = require('../tool/constant')

const debug = true // 是否开启debag 错误日志

function connect() {
  return mysql.createConnection({ // 连接mysql
    ...config,
    multipleStatements: true // 同时执行多条语句
  })
}

function querySql(sql) { // 查询语句
  const conn = connect()
  debug && console.log(sql)
  return new Promise((resolve, reject) => {
    try {
      conn.query(sql, (err, reuslt) => {
        if (err) {
          debug && console.log('查询失败' + JSON.stringify(err))
        } else {
          debug && console.log('查询成功' + JSON.stringify(reuslt))
          resolve(reuslt)
        }
      })
    } catch (err) {
      reject(err)
    } finally {
      conn.end()
    }
  })
}

function queryOne(sql) {
  return new Promise((resolve, reject) => {
    querySql(sql).then(result => {
      if (result && result.length > 0) {
        resolve(result[0])
      } else {
        resolve(null)
      }
    }).catch(err => {
      reject(err)
    })
  })
}

module.exports = {
  querySql,
  queryOne
}

用法

const { querySql, queryOne } = require('../db/config')

function login(username, password) {
    return querySql(`select * from admin_user where username='${ username }' and password='${ password }'`)
}

function findUser(username) {
  return queryOne(`select * from admin_user where username='${ username }'`)
}

module.exports = {
  login,
  findUser
}

对于不熟悉mysql语句的前端小伙伴是不是看的两眼发懵,而且这是最简单的条件查询而已

使用sequelize操作mysql

npm i sequelize -S

sequelize基本配置

const Sequelize = require('sequelize')

const sqlConfig = { // mysql 基本配置
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'network_disk'
}

console.log('init sequelize...')

const sequelize = new Sequelize(sqlConfig.database, sqlConfig.user, sqlConfig.password, { // 连接mysql
  host: sqlConfig.host,
  dialect: 'mysql',
  pool: {
    max: 10,
    min: 0,
    idle: 10000
  },
  timezone: '+08:00'
})

exports.sequelize = sequelize // 抛出sequelize实例

exports.defineModel = (name, attributes) => {
  const attrs = {}
  for (const key in attributes) { // 循环表字段
    const val = attributes[key]
    if (typeof val === 'object' && val['type']) {
      val.allowNull = val.allowNull || true
      attrs[key] = val
    } else {
      attrs[key] = {
        type: val
      }
    }
  }
  attrs.version = {
    type: Sequelize.BIGINT
  }

  return sequelize.define(name, attrs, { // 表默认配置
    tableName: name,
    timestamps: true,
    paranoid: true,
    charset: 'utf8mb4',
    collate: 'utf8mb4_general_ci',
    hooks: {
      beforeBulkCreate: (obj) => {
        obj.version = 0
      },
      beforeValidate: (obj) => {
        obj.isNewRecord ? obj.version = 0 : obj.version = obj.version + 1
      }
    }
  })
}

接下来我们用对象描述一个表,并创建它

const Sequelize = require('sequelize')
const db = require('./index') // 引入刚刚写的sequelize配置

module.exports = db.defineModel('user_list', {
  u_id: { type: Sequelize.INTEGER, allowNull: false, primaryKey: true, unique: true, autoIncrement: true },
  u_name: { type: Sequelize.STRING },
  u_email: { type: Sequelize.STRING },
  u_capacity: { type: Sequelize.INTEGER(), defaultValue: 10 }, // 容量
  u_password: { type: Sequelize.STRING, defaultValue: 123456 },
  u_pic: { type: Sequelize.STRING(), defaultValue: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png' } // 用户头像
})

我们简单的使用他的一个查询功能看看


const UserList = require('../db/user_list') // 引入表实例

fileList.sync({ // 创建表
  force: true
})

 UserList.findOne({
    where: { u_name: '', u_password: '' }
  }).then(res => { // 成功
  }).catch(err => { // 失败
 })

这样是不是比写sql语句来说更加的友好,就跟使用mongoose差不多语法,写起来也舒服

此篇章是mysql的配置以及搭配sequelize去使用,后续篇幅的话会用到。

此篇幅的关联文章

什么是electron,vue如何应用electron

electron仿百度云桌面版,Vue端基础配置和electronAPI封装