跳到主要内容

mysql2

  • MySql2 是 nodejs 生态中用于操作 mysql 的包
  • 官方文档不全面,需要结合 mysql 第一版本的包的文档

连接池

创建连接池

mysql
.createPool({
host: 'localhost',
user: 'user',
database: 'db-name',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
password: process.env.DB_PASS
})
.promise();

通过 .promise 将连接池中的操作设置为 Promise 类型。

从连接池中获取连接使用

const connection = await pool.getConnection();
connection.query('SELECT 1 + 1 AS solution');
connection.release();

用完后需要释放连接,否则连接池中的连接数会一直增加。

直接使用连接池

await pool.query('SELECT 1 + 1 AS solution');

创建连接

const connection = mysql.createConnection({
host: 'localhost',
ssl: {
ca: fs.readFileSync(__dirname + '/mysql-ca.crt')
}
});

query 和 execute

  • 最大的区别是 execute 会对 sql 进行预处理,防止 sql 注入,query 需要手动处理
  • API 上有些许差异

批量插入

query
const sql = 'INSERT INTO `table` (`name`, `age`) VALUES ?';
const values = [
['name1', 1],
['name2', 2]
];
await connection.query(sql, [values]);

事务

const connection = await pool.getConnection();
await connection.beginTransaction();
try {
await connection.query('DELETE FROM posts');
await connection.query('INSERT INTO posts SET title = ?', 'Hello MySQL');
await connection.commit();
} catch (err) {
await connection.rollback();
throw err;
} finally {
connection.release();
}