Node连接mysql中createConnection和createPool的区别

3,865 阅读2分钟

「本文正在参与技术专题征文Node.js进阶之路,点击查看详情

前言

在Node中,我们在连接mysql数据库的时候,因为Node没有连接mysql的方法,需要使用第三方的包mysql

yarn add mysql

引入mysql第三方包

const mysql = require('mysql')

在引入之后,连接数据库有两种方法,一种是createConnection,另一种是createPool

createConnection连接数据库

const db = mysql.createConnection({
  host: '127.0.0.1',	// localhost也可以
  port: 3306,
  user: 'root',
  password: '123456',
  database: 'db'
})

// 连接数据库
db.connect((err) => {
  if(err) return
  console.log('Connection Success')
})

// TODO: 数据查询
db.query('sql语句', (err, res) => {
  if(err) return console.log(err.message)
  console.log(res)
})


// 断开数据库连接
db.end((err) => {
  if(err) return
  console.log('Connection Closed')
})

以上是用createConnection连接数据库的案例。

createPool创建连接池连接数据库

我们知道建议一个连接池的成本很高,很浪费性能。如果我们每接收一个客户端请求,就建立一次连接或多个连接,很浪费服务端的资源。

所以在服务端应用程序中需要为多个数据库连接创建并维护一个连接池,当连接不需要的时候,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,从连接池中取出连接,就不需要再重新建立连接。

完整示例

const db = mysql.createPool({
  host: '127.0.0.1',	// localhost也可以
  port: 3306,
  user: 'root',
  password: '123456',
  database: 'db'
})

// 建立数据库连接,如无连接可用则隐式的建立一个数据库连接
db.getConnection((err, connection) => {
  if(err){
    console.log('连接失败')
  } else {
		console.log('连接成功')
    db.query('sql语句', (err, res) => {
      if(err) return console.log(err.message)
      console.log(res)
      
      // 当不再使用时,归还到连接池中
      connection.release()
      // 当不再使用时并要从连接池中移除
      connection.destroy()
    })
  }
  
  // 当连接池不需要使用时,关闭连接池
  db.end()
})

结语

以上就是createConnectioncreatePool的区别,建议小伙伴直接动手去尝试一下。

参考文章:www.cnblogs.com/xsilence/p/…