Skip to content

Repository files navigation

Node MySQL 2

Greenkeeper badgeNPM VersionNPM DownloadsNode.js VersionLinux BuildWindows BuildLicense

MySQL client for Node.js with focus on performance. Supports prepared statements, non-utf8 encodings, binary log protocol, compression, ssl much more

NPMNPM

Table of contents

History and Why MySQL2

MySQL2 project is a continuation of MySQL-Native. Protocol parser code was rewritten from scratch and api changed to match popular mysqljs/mysql. MySQL2 team is working together with mysqljs/mysql team to factor out shared code and move it under mysqljs organisation.

MySQL2 is mostly API compatible with mysqljs and supports majority of features. MySQL2 also offers these additional features

Installation

MySQL2 is free from native bindings and can be installed on Linux, Mac OS or Windows without any issues.

npm install --save mysql2

First Query

// get the clientconstmysql=require('mysql2');// create the connection to databaseconstconnection=mysql.createConnection({host: 'localhost',user: 'root',database: 'test'});// simple queryconnection.query('SELECT * FROM `table` WHERE `name` = "Page" AND `age` > 45',function(err,results,fields){console.log(results);// results contains rows returned by serverconsole.log(fields);// fields contains extra meta data about results, if available});// with placeholderconnection.query('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',['Page',45],function(err,results){console.log(results);});

Using Prepared Statements

With MySQL2 you also get the prepared statements. With prepared statements MySQL doesn't have to prepare plan for same query everytime, this results in better performance. If you don't know why they are important, please check these discussions

MySQL provides execute helper which will prepare and query the statement. You can also manually prepare / unprepare statement with prepare / unprepare methods.

// get the clientconstmysql=require('mysql2');// create the connection to databaseconstconnection=mysql.createConnection({host: 'localhost',user: 'root',database: 'test'});// execute will internally call prepare and queryconnection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',['Rick C-137',53],function(err,results,fields){console.log(results);// results contains rows returned by serverconsole.log(fields);// fields contains extra meta data about results, if available// If you execute same statement again, it will be picked form a LRU cache// which will save query preparation time and give better performance});

Using Promise Wrapper

MySQL2 also support Promise API. Which works very well with ES7 async await.

asyncfunctionmain(){// get the clientconstmysql=require('mysql2/promise');// create the connectionconstconnection=awaitmysql.createConnection({host:'localhost',user: 'root',database: 'test'});// query databaseconst[rows,fields]=awaitconnection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',['Morty',14]);}

MySQL2 use default Promise object available in scope. But you can choose which Promise implementation you want to use

// get the clientconstmysql=require('mysql2/promise');// get the promise implementation, we will use bluebirdconstbluebird=require('bluebird');// create the connection, specify bluebird as Promiseconstconnection=mysql.createConnection({host:'localhost',user: 'root',database: 'test',Promise: bluebird});// query databaseconst[rows,fields]=connection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',['Morty',14]);

API and Configuration

MySQL2 is mostly API compatible with Node MySQL. You should check their API documentation to see all available API options.

If you find any incompatibility with Node MySQL, Please report via Issue tracker. We will fix reported incompatibility on priority basis.

Documentation

You can find more detailed documentation here. You should also check various code examples to understand advanced concepts.

Acknowledgements

  • Internal protocol is written by @sidorares MySQL-Native
  • Constants, SQL parameters interpolation, Pooling, ConnectionConfig class taken from node-mysql
  • SSL upgrade code based on @TooTallNate code
  • Secure connection / compressed connection api flags compatible to MariaSQL client.
  • Contributors

Contributing

Want to improve something in node-mysql2. Please check Contributing.md for detailed instruction on how to get started.

About

⚡ fast node-mysql compatible mysql driver for node.js

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages