node中使用mysql

在nodeJs中mysq的基础用法

mysql基础

增删改查

const mysql = require('mysql')

const connection = mysql.createConnection({
    host: 'localhost', // 数据库的IP地址
    port: 3306, // 端口号
    user: 'root', // 登录数据库的账号
    password: '123456', // 登录数据库的密码
    database: 'test', // 指定要操作哪个数据库
})

// 建立连接
connection.connect()

// 检测mysql模块能否正常工作
connection.query('select 1', (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  // 只要能打印出[ RowDataPacket {'1':1} ]的结果,就证明数据库连接正常
  console.log(results)
})

// 查询数据
connection.query('SELECT * FROM news', (err, result) => {
  // err:可能产生的错误
  // result:SQL语句的结果
  if (err) throw err
  console.log(result)
})

// 插入数据
connection.query(`INSERT INTO news VALUES('2','标题','2020-09-09','/shutterbug.jpg','描述','内容')`, (err, result) => {
  if (err) throw err
  console.log(result)
})

// 更新数据
connection.query('UPDATE news SET title="lucky" WHERE id=3', (err, result) => {
  if (err) throw err
  console.log(result)
})

// 删除数据
connection.query('DELETE FROM news WHERE id=04', (err, result) => {
  if (err) throw err
  console.log(result)
})

连接池技术 

数据库的连接池负责分配、管理和释放数据库连接对象。它允许应用程序重复使用一个现有的数据库的连接对象,而不是重新创建一个

const mysql = require('mysql')

// 建立与MySQL数据库的连接
var db = mysql.createPool({
  host: 'localhost', // 数据库的IP地址
  port: 3306, // 端口号
  user: 'root', // 登录数据库的账号
  password: '123456', // 登录数据库的密码
  database: 'test', // 指定要操作哪个数据库
  connectionLimit: 10 // 一次创建的最大连接数(默认值:10)
})

// 查询news表中的所有数据
const query_sql = 'select * from news'
db.query(query_sql, (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  console.log(results)
})

// 插入数据
// 要插入的数据对象
const add_obj = { filename: '11653277206', title: '体育' }
// 待执行的SQL语句,其中英文的?代表占位符,id虽是自增,但也要占位,不然报错
const add_sql = 'INSERT INTO news (id,filename,title) VALUES (0,?,?)'
// 使用数组的形式,依次为?占位符指定具体的值
db.query(add_sql, [add_obj.filename, add_obj.title], (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('插入数据成功')
  }
})

// 插入数据的便捷方式
// 要插入的数据对象,id 为 0 会自增
const add_obj1 = { id: '0', filename: '音乐2' }
// 待执行的SQL语句,其中英文的?表示占位符
const add_sql1 = 'INSERT INTO news SET ?'
// 直接将数据对象当作占位符的值
db.query(add_sql1, add_obj1, (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('插入数据成功')
  }
})

// 更新数据
const edit_obj = { id: '14', filename: '形势与政策' }
const edit_sql = 'UPDATE news SET filename=? WHERE id=?'
// 调用db.query()执行SQL语句的同时,使用数组依次为占位符指定具体的值
db.query(edit_sql, [edit_obj.filename, edit_obj.id], (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('更新数据成功')
  }
})

// 更新数据的便捷方式
const edit_obj1 = { id: '13', filename: '马克思主义原理', title: 'cccc' }
const edit_sql1 = 'UPDATE news SET ? WHERE id=?'
db.query(edit_sql1, [edit_obj1, edit_obj1.id], (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('更新数据成功')
  }
})

// 删除数据
const del_sql = 'DELETE FROM news WHERE id=?'
// 调用db.query()执行SQL语句的同时,为占位符指定具体的值
db.query(del_sql, '15', (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('删除数据成功')
  }
})

// 标记删除
// 所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除。
const del_sql1 = 'UPDATE news SET status=? WHERE id=?'
db.query(del_sql1, [1, '6'], (err, results) => {
  if (err) {
    return console.log(err.message)
  }
  if (results.affectedRows === 1) {
    console.log('标记删除成功')
  }
})

配合express使用

访问express路由,执行mysql增删改查

const express = require('express')
const mysql = require('mysql')

// 创建路由对象
const router = express.Router()

// 配置文件
const dbconfig = {
  host: 'localhost', // 数据库的IP地址
  port: 3306, // 端口号
  user: 'root', // 登录数据库的账号
  password: '123456', // 登录数据库的密码
  database: 'test' // 指定要操作哪个数据库
}

// 查询数据
router.get('/select', (req, res) => {
  // 连接数据库
  const conn = mysql.createConnection(dbconfig)
  conn.query('select * from news', (err, results, fields) => {
    if (err) throw err
    console.log(results)
    res.send(results)
  })
  conn.end()
})

// 插入数据
router.post('/insert', (req, res) => {
  const data = { id: '06', filename: '孙三', title: '60' }
  const conn = mysql.createConnection(dbconfig)
  conn.query('insert into news set ?', data, (err, results) => {
    if (err) throw err
    console.log(results)
    res.send(results)
  })
  conn.end()
})

// 删除数据
router.post('/delete', (req, res) => {
  const conn = mysql.createConnection(dbconfig)
  conn.query('delete from news where id = ?', '06', (err, results) => {
    if (err) throw err
    console.log(results)
    res.send(results)
  })
  conn.end()
})

// 更新数据
router.post('/update', (req, res) => {
  const conn = mysql.createConnection(dbconfig)
  conn.query('update news set filename = ? where id = ?', ['周九', '05'], (err, results) => {
    if (err) throw err
    console.log(results)
    res.send(results)
  })
})

module.exports = router

封装使用

封装连接池,路由访问时调用

const express = require('express')
const mysql = require('mysql')
require('express-async-errors')

const app = express()

const router = express.Router()

// 创建数据库连接池
const pool = mysql.createPool({
  connectionLimit: 20,
  host: 'localhost', // 数据库的IP地址
  port: 3306, // 端口号
  user: 'root', // 登录数据库的账号
  password: 'root', // 登录数据库的密码
  database: 'test' // 指定要操作哪个数据库
})

const query = (sql, values = '') => {
  return new Promise((resolve, reject) => {
    pool.getConnection((err, connection) => {
      // err 表示错误信息。 没有错误的时候是一个空值
      // connection 从连接池中取出的连接对象,可以通过这个对象,去访问数据库
      if (err) {
        reject(err)
      } else {
        connection.query(sql, values, (err, result) => {
          if (err) reject(err)
          else resolve(result)
          // 将连接归还连接池
          connection.release()
        })
      }
    })
  })
}

router.get('/content', async (req, res) => {
  const data = await query(`select * from content where id=?`, [5])
  console.log(data)
  res.send(data)
})

app.use('/api', router)

app.listen(9000, () => {
  console.log('start server 9000')
})

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值