mysql驱动系统

64 阅读2分钟

什么是驱动系统

驱动程序是连接内存和其他存储介质的桥梁

mysql驱动程序是连接内存数据和mysql数据的桥梁

mysql驱动程序通常使用mysql和mysql2

mysql2的使用

callback

  1. 安装:npm i --save mysql2
  2. 使用
// 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);  
}  
);
  1. 断开连接:connection.end();
  2. 增加:
connection.query(
    "insert into 数据库名('name', location, buildDate) values('abc', '阿萨德', curdate());",
    (err, result) => {
        console.log(result);
    }
);
  1. 修改
connection.query(
    "update 数据库名 set 值=修改内容' where 条件",
    (err, result) => {
        console.log(result);
    }
);
  1. 删除
connection.query(
    "delete from 数据库名 where 条件",
    (err,result)=>{
      console.log(result);
    }
};

promise

  1. 创建连接
//引入
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());