什么是驱动系统
驱动程序是连接内存和其他存储介质的桥梁
mysql驱动程序是连接内存数据和mysql数据的桥梁
mysql驱动程序通常使用mysql和mysql2
mysql2的使用
callback
- 安装:
npm i --save mysql2 - 使用
// Get the client
const mysql = require('mysql2');
// 创建一个数据库连接
const connection = mysql.createConnection({
host: 'localhost', //主机,如果是本机就是localhost
user: 'root', //账户
password:"123456"//密码
database: 'test',
});
// A simple SELECT query
connection.query(
'SELECT * FROM `table` WHERE `name` = "Page" AND `age` > 45',
//回调函数,查询完成之后得到的结果
//一般只用前两个参数,err表示错误,results表示结果
function (err, results, fields) {
console.log(results); // results contains rows returned by server
console.log(fields); // fields contains extra meta data about results, if available
}
);
// Using placeholders
connection.query(
'SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',
['Page', 45],
function (err, results) {
console.log(results);
}
);
- 断开连接:
connection.end(); - 增加:
connection.query(
"insert into 数据库名('name', location, buildDate) values('abc', '阿萨德', curdate());",
(err, result) => {
console.log(result);
}
);
- 修改
connection.query(
"update 数据库名 set 值=修改内容' where 条件",
(err, result) => {
console.log(result);
}
);
- 删除
connection.query(
"delete from 数据库名 where 条件",
(err,result)=>{
console.log(result);
}
};
promise
- 创建连接
//引入
import mysql from 'mysql2/promise';
// 创建数据库连接
const connection = await mysql.createConnection({
host: 'localhost',
user: 'root',
database: 'test',
password:"abcd"
//需要运行多条sql语句
multipleStatements:true
});
// 添加
try {
const [results, fields] = await connection.query(
'SELECT * FROM `table` WHERE `name` = "Page" AND `age` > 45'
);
console.log(results); // results contains rows returned by server
console.log(fields); // fields contains extra meta data about results, if available
} catch (err) {
console.log(err);
}
//
try {
const [results] = await connection.query(
'SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',
['Page', 45]
);
console.log(results);
} catch (err) {
console.log(err);
}
注意:用promise异步请求创建的时候,使用修改返回的值是一个数组
防止sql注入:(sql注入:promise方式下,运行了多条sql语句,用户通过注入sql语句到最终查询中,导致了整个sql与预期行为不符)
解决方法:
用connection.execute(sql,[id])
const mysql = require("/mysql2/promise");
async function test(id) {
//创建一个数据库连接
const connection = await mysql.createConnection({
host: "localhost",
user: "root",
password: "yybdwyJ42",
database: "companydb",
multipleStatements: true,
});
const sql = 'select * from employee where id=?';
const [results] = await connection.execute(sql, [id]);
console.log(results);
connection.end();
}
test('*'); insert into company('name', location, buildDate) values('aaa', 'sdfsad', curdate());
createPool
为了避免多次连接数据库之后没有释放空间。
createPool 的主要作用是创建一个连接池,用于管理和复用数据库连接。连接池的核心目的是优化数据库操作的性能和资源利用率,
示例:
const mysql = require("mysql2/promise");
const pool = mysql.createPool({
host: "localhost",
user: "root",
password: "bydbdyd",
database: "companydb",
multipleStatements: true,
});
async function test(id) {
// 创建一个数据库连接
const sql = 'select * from employee where id>=?';
const [results] = await pool.execute(sql, [id]);
console.log(results);
}
test('*'); insert into company("name", location, buildDate) values("aaa", "sdfsad", curdate());