mysql2¶
This page explains how to use ts-sql-query
with the mysql2 driver. It covers two approaches: using a connection pool or using a single connection directly.
Do not share connections between requests
A ts-sql-query
connection object — along with the query runner instances passed to its constructor — represents a dedicated connection to the database.
Therefore, you must not share the same connection object between concurrent HTTP requests. Instead, create a new connection object for each request, along with its own query runners.
Even if the query runner internally uses a connection pool, the ts-sql-query
connection still represents a single active connection, acquired from the pool. It must be treated as such and never reused across requests.
Using a connection pool¶
Executes queries through a mysql2 connection obtained from a pool.
import { createPool } from "mysql2";
import { MySql2PoolQueryRunner } from "ts-sql-query/queryRunners/MySql2PoolQueryRunner";
const pool = createPool({
host: 'localhost',
user: 'user',
password: 'secret',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
async function main() {
const connection = new DBConnection(new MySql2PoolQueryRunner(pool));
// Do your queries here
}
Using a single connection¶
Executes queries through a dedicated mysql2 connection.
import { createPool } from "mysql2";
import { MySql2QueryRunner } from "ts-sql-query/queryRunners/MySql2QueryRunner";
const pool = createPool({
host: 'localhost',
user: 'user',
password: 'secret',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
function main() {
pool.getConnection((error, mysql2Connection) => {
if (error) {
throw error;
}
try {
const connection = new DBConnection(new MySql2QueryRunner(mysql2Connection));
doYourLogic(connection).finally(() => {
mysql2Connection.release();
});
} catch(e) {
mysql2Connection.release();
throw e;
}
});
}
async function doYourLogic(connection: DBConnection) {
// Do your queries here
}