npm install --save mysql2
npm install --save-dev @types/node
The
@types/node
ensure the proper interaction between TypeScript and the Node.js modules used by MySQL2 (net, events, stream, tls, etc.).
info
Requires TypeScript >=4.5.2
.
You can import MySQL2 in two ways:
esModuleInterop
option to true
in tsconfig.json
import mysql from 'mysql2';
import mysql from 'mysql2/promise';
esModuleInterop
option to false
in tsconfig.json
import * as mysql from 'mysql2';
import * as mysql from 'mysql2/promise';
Connection
import mysql, { ConnectionOptions } from 'mysql2';
const access: ConnectionOptions = {
user: 'test',
database: 'test',
};
const conn = mysql.createConnection(access);
Pool Connection
import mysql, { PoolOptions } from 'mysql2';
const access: PoolOptions = {
user: 'test',
database: 'test',
};
const conn = mysql.createPool(access);
Query and Execute A simple query
conn.query('SELECT 1 + 1 AS `test`;', (_err, rows) => {
});
conn.execute('SELECT 1 + 1 AS `test`;', (_err, rows) => {
});
The rows
output will be these possible types:
RowDataPacket[]
RowDataPacket[][]
ResultSetHeader
ResultSetHeader[]
ProcedureCallPacket
In this example, you need to manually check the output types
Type Specification RowDataPacket[] 2StableAn array with the returned rows, for example:
import mysql, { RowDataPacket } from 'mysql2';
const conn = mysql.createConnection({
user: 'test',
database: 'test',
});
conn.query<RowDataPacket[]>('SELECT 1 + 1 AS `test`;', (_err, rows) => {
console.log(rows);
});
conn.query<RowDataPacket[]>('SHOW TABLES FROM `test`;', (_err, rows) => {
console.log(rows);
});
Using rowsAsArray
option as true
:
import mysql, { RowDataPacket } from 'mysql2';
const conn = mysql.createConnection({
user: 'test',
database: 'test',
rowsAsArray: true,
});
conn.query<RowDataPacket[]>(
'SELECT 1 + 1 AS test, 2 + 2 AS test;',
(_err, rows) => {
console.log(rows);
}
);
conn.query<RowDataPacket[]>('SHOW TABLES FROM `test`;', (_err, rows) => {
console.log(rows);
});
RowDataPacket[][] 2Stable
Using multipleStatements
option as true
with multiple queries:
import mysql, { RowDataPacket } from 'mysql2';
const conn = mysql.createConnection({
user: 'test',
database: 'test',
multipleStatements: true,
});
const sql = `
SELECT 1 + 1 AS test;
SELECT 2 + 2 AS test;
`;
conn.query<RowDataPacket[][]>(sql, (_err, rows) => {
console.log(rows);
});
2Stable History Version Changes v3.5.1
OkPacket is deprecated and might be removed in the future major release.
For INSERT
, UPDATE
, DELETE
, TRUNCATE
, etc.:
import mysql, { ResultSetHeader } from 'mysql2';
const conn = mysql.createConnection({
user: 'test',
database: 'test',
});
const sql = `
SET @1 = 1;
`;
conn.query<ResultSetHeader>(sql, (_err, result) => {
console.log(result);
});
2Stable History Version Changes v3.5.1
Introduce ResultSetHeader[]
For multiples INSERT
, UPDATE
, DELETE
, TRUNCATE
, etc. when using multipleStatements
as true
:
import mysql, { ResultSetHeader } from 'mysql2';
const conn = mysql.createConnection({
user: 'test',
database: 'test',
multipleStatements: true,
});
const sql = `
SET @1 = 1;
SET @2 = 2;
`;
conn.query<ResultSetHeader[]>(sql, (_err, results) => {
console.log(results);
});
ProcedureCallPacket 2Stable History Version Changes v3.5.1
Introduce ProcedureCallPacket
tip
By performing a Call Procedure using INSERT
, UPDATE
, etc., the return will be a ProcedureCallPacket<ResultSetHeader>
(even if you perform multiples queries and set multipleStatements
to true
):
import mysql, { ProcedureCallPacket, ResultSetHeader } from 'mysql2';
const conn = mysql.createConnection({
user: 'test',
database: 'test',
});
conn.query('DROP PROCEDURE IF EXISTS myProcedure');
conn.query(`
CREATE PROCEDURE myProcedure()
BEGIN
SET @1 = 1;
SET @2 = 2;
END
`);
const sql = 'CALL myProcedure()';
conn.query<ProcedureCallPacket<ResultSetHeader>>(sql, (_err, result) => {
console.log(result);
});
For
CREATE PROCEDURE
andDROP PROCEDURE
, these returns will be the defaultResultSetHeader
.
By using SELECT
and SHOW
queries in a Procedure Call, it groups the results as:
[RowDataPacket[], ResultSetHeader]
For ProcedureCallPacket<RowDataPacket[]>
, please see the following examples.
OkPacket is deprecated and might be removed in the future major release.
Please use ResultSetHeader instead.
You can also check some code examples using MySQL2 and TypeScript to understand advanced concepts:
RowDataPacket
RowDataPacket
and rowAsArray
RowDataPacket
and multipleStatements
RowDataPacket
, rowAsArray
and multipleStatements
ResultSetHeader
, extending and using Interfaces with RowDataPacket
from ProcedureCallPacket
ResultSetHeader
, extending and using Interfaces with RowDataPacket
and rowAsArray
from ProcedureCallPacket
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4