环境
mysql2是node链接mysql的数据库驱动
- 新建文件夹
- npm init -y
- npm install mysql2
mysql2基本使用
新建js文件,之后node运行
const mysql = require('mysql2')
// 1.建立与数据库的链接
const connection = mysql.createConnection({
host: 'localhost', // 要链接的ip地址,本地localhost
port: 3306,
database: 'music_db',
user: 'root',
password: 'xxxxxxxxx',
})
// 2.执行操作语句,执行sql操作数据库
const statement = 'SELECT * FROM `t_mv`;'
// err:报错,values:值,fields:表的字段信息
connection.query(statement,(err,values,fields)=>{
if (err) {
console.log(err);
return
}
console.log(values);
console.log(fields);
})
预编译语句
- 提高性能:将创建的语句模块发送给MySQL,然后MySQL编译(解析、优化、转换)语句模块,并且存储它但是不执行,之
后我们在真正执行时会给?提供实际的参数才会执行;就算多次执行,也只会编译一次,所以性能是更高的 - 防止SQL注入:之后传入的值不会像模块引擎那样就编译,那么一些SQL注入的内容不会被执行;or 1 = 1不会被执行
const mysql = require('mysql2')
// 1.建立与数据库的链接
const connection = mysql.createConnection({
...
})
// 2.执行操作语句,执行sql操作数据库
const statement = 'SELECT * FROM `t_mv` WHERE id > ? AND id < ? ;'
// 第二个是语句中?参数
connection.execute(statement,[1,3],(err,values,fields)=>{
if (err) {
return
}
console.log(values);
})
连接池
如果我们有多个请求,一个链接可能存在占用,我们每次请求是否需要创建一个新的链接?
mysql2提供了连接池
当需要时会自动创建链接,使用后不会销毁,放到链接池中之后使用,我们可以设置连接池最大链接数量
const mysql = require('mysql2')
// 1.建立与数据库的链接池
const connectionPool = mysql.createPool({
...
connectionLimit: 5, // 链接池最大链接数量
})
const statement = 'SELECT * FROM `t_mv` WHERE id > ? AND id < ? ;'
// 链接池会自动创建链接
connectionPool.execute(statement,[1,3],(err,values,fields)=>{
if (err) return
console.log(values);
})
promise方式
const mysql = require('mysql2')
// 1.建立与数据库的链接池
const connectionPool = mysql.createPool({
...
})
const statement = 'SELECT * FROM `t_mv` WHERE id > ? AND id < ? ;'
// 需要先调promise函数
connectionPool.promise().execute(statement,[1,3]).then(res=>{
// res是一个数组,两个值,res[0]是values,res[1]是fields
const [values,fields] = res
console.log(values);
console.log(fields);
}).catch(err=>{
console.log(err);
})