在Nodejs中使用MySQL数据库

简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Management System,关系型数据库管理系统)应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的SQL语言是用于访问数据的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开源代码这一特点,一般中小型和大型网站的开发都选择MySQL作为网站数据库。

使用

第一步:安装mysql2

javascript 复制代码
yarn add mysql2

第二步:写连接数据库的配置文件

db.config.js

javascript 复制代码
// 引入mysql
const mysql = require('mysql2');


// 创建连接
const connection = mysql.createConnection({
  host: 'localhost', // 数据库地址
  user: 'root', // 用户名
  password: '123456', // 密码
})

// 连接数据库
connection.connect(err => {
  if (err) {
    console.error('连接数据库发生错误: ' + err.stack);
    return;
  }

  // 检查并创建数据库
  const dbName = 'ffmpeg'
  // 查询ffmepg数据库是否存在,如果不存在则创建
  connection.query(`CREATE DATABASE IF NOT EXISTS ${dbName}`, (err, result) => {
    if (err) {
      console.error('创建数据库失败: ' + err.message);
      return;
    }
    console.log(`数据库${dbName}已存在或已创建`);

    // 选择数据库
    connection.changeUser({ database: dbName }, (err) => {
      if (err) {
        console.error('选择数据库失败: ' + err.stack);
        return
      }
    })
  });
})

module.exports = connection

第三步:在nodejs的app.js文件中引入并使用db.config.js文件

javascript 复制代码
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');

var app = express();
// 连接数据库
require('./config/db.config')
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// 使用cors解决跨域问题
app.use(require('cors')());

app.use('/', indexRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

通过以上步骤就可以连接对应的数据库。

如果想要在连接数据的时候顺便创建表,可以按照下方步骤进行

第一步:为了方便管理,我将创建表的逻辑代码单独写成一个js文件 --- GroupModel.js

说明:

创建表格的时候要判断该表是否已经存在,因为重复创建同一个表的时候会报错,所以下方代码使用 CREATE TABLE IF NOT EXISTS来规避这个问题。

javascript 复制代码
// 引入mysql
const mysql = require('mysql2');

// 创建视频分组表
function createGroupTable(connection) {
  /*
    AUTO_INCREMENT 定义列为自增主键。

  */
  const sql = `
    CREATE TABLE IF NOT EXISTS block (
      id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
      group_name VARCHAR(255) NOT NULL COMMENT '文件名',
      num INT NOT NULL DEFAULT 0  COMMENT '关联视频数量,默认值为0',
      create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间'
    )
  `;
  // 执行SQL语句
  connection.query(sql, (err, result) => {
    if (err) {
      console.error('分组表创建失败:', err.message);
      return;
    }
    console.log('分组表已存在或创建');
  });
}

module.exports = createGroupTable

第二步:将GroupModel.js文件在db.config.js文件中引入并使用

javascript 复制代码
// 引入mysql
const mysql = require('mysql2');
const createGroupTable = require('../model/GroupModel');


// 创建连接
const connection = mysql.createConnection({
  host: 'localhost', // 数据库地址
  user: 'root', // 用户名
  password: '123456', // 密码
})

// 连接数据库
connection.connect(err => {
  if (err) {
    console.error('连接数据库发生错误: ' + err.stack);
    return;
  }

  // 检查并创建数据库
  const dbName = 'ffmpeg'
  // 查询ffmepg数据库是否存在,如果不存在则创建
  connection.query(`CREATE DATABASE IF NOT EXISTS ${dbName}`, (err, result) => {
    if (err) {
      console.error('创建数据库失败: ' + err.message);
      return;
    }
    console.log(`数据库${dbName}已存在或已创建`);

    // 选择数据库
    connection.changeUser({ database: dbName }, (err) => {
      if (err) {
        console.error('选择数据库失败: ' + err.stack);
        return
      }
      createGroupTable(connection)
    })
  });
})

module.exports = connection
相关推荐
长潇若雪10 分钟前
结构体(C 语言)
c语言·开发语言·经验分享·1024程序员节
Zilliz Planet22 分钟前
GenAI 生态系统现状:不止大语言模型和向量数据库
数据库·人工智能·语言模型·自然语言处理
DARLING Zero two♡44 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.12——深入理解指针(2)
c语言·开发语言·科技·1024程序员节
瓜牛_gn1 小时前
redis详细教程(4.GEO,bitfield,Stream)
数据库·redis·缓存
独行soc1 小时前
#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Jenkins组件
安全·jenkins·安全威胁分析·1024程序员节·shodan
练习两年半的工程师1 小时前
建立一个简单的todo应用程序(前端React;后端FastAPI;数据库MongoDB)
前端·数据库·react.js·fastapi
dawn1912282 小时前
Java 中的正则表达式详解
java·开发语言·算法·正则表达式·1024程序员节
新知图书2 小时前
MySQL 9从入门到性能优化-创建触发器
数据库·mysql·性能优化
黑不拉几的小白兔2 小时前
PTA L1系列题解(C语言)(L1_097 -- L1_104)
数据结构·算法·1024程序员节
HEX9CF2 小时前
【SQLite】改善默认输出格式不直观难以阅读问题:通过修改输出设置提升数据可读性
数据库·sqlite