Mysql
A pure node.js JavaScript Client implementing the MySQL protocol.
Install / Use
/learn @mysqljs/MysqlREADME
mysql
[![NPM Version][npm-version-image]][npm-url] [![NPM Downloads][npm-downloads-image]][npm-url] [![Node.js Version][node-image]][node-url] [![Linux Build][github-actions-ci-image]][github-actions-ci-url] [![Windows Build][appveyor-image]][appveyor-url] [![Test Coverage][coveralls-image]][coveralls-url]
Table of Contents
- Install
- Introduction
- Contributors
- Sponsors
- Community
- Establishing connections
- Connection options
- Terminating connections
- Pooling connections
- Pool options
- Pool events
- Closing all the connections in a pool
- PoolCluster
- Switching users and altering connection state
- Server disconnects
- Performing queries
- Escaping query values
- Escaping query identifiers
- Getting the id of an inserted row
- Getting the number of affected rows
- Getting the number of changed rows
- Getting the connection ID
- Executing queries in parallel
- Streaming query rows
- Multiple statement queries
- Stored procedures
- Joins with overlapping column names
- Transactions
- Ping
- Timeouts
- Error handling
- Exception Safety
- Type casting
- Debugging and reporting problems
- Security issues
- Contributing
- Running tests
- Todo
Install
This is a Node.js module available through the npm registry.
Before installing, download and install Node.js. Node.js 0.6 or higher is required.
Installation is done using the
npm install command:
$ npm install mysql
For information about the previous 0.9.x releases, visit the v0.9 branch.
Sometimes I may also ask you to install the latest version from Github to check if a bugfix is working. In this case, please do:
$ npm install mysqljs/mysql
Introduction
This is a node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 100% MIT licensed.
Here is an example on how to use it:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
connection.end();
From this example, you can learn the following:
- Every method you invoke on a connection is queued and executed in sequence.
- Closing the connection is done using
end()which makes sure all remaining queries are executed before sending a quit packet to the mysql server.
Contributors
Thanks goes to the people who have contributed code to this module, see the GitHub Contributors page.
Additionally I'd like to thank the following people:
- Andrey Hristov (Oracle) - for helping me with protocol questions.
- Ulf Wendel (Oracle) - for helping me with protocol questions.
Sponsors
The following companies have supported this project financially, allowing me to spend more time on it (ordered by time of contribution):
- Transloadit (my startup, we do file uploading & video encoding as a service, check it out)
- Joyent
- pinkbike.com
- Holiday Extras (they are hiring)
- Newscope (they are hiring)
Community
If you'd like to discuss this module, or ask questions about it, please use one of the following:
- Mailing list: https://groups.google.com/forum/#!forum/node-mysql
- IRC Channel: #node.js (on freenode.net, I pay attention to any message
including the term
mysql)
Establishing connections
The recommended way to establish a connection is this:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'example.org',
user : 'bob',
password : 'secret'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
However, a connection can also be implicitly established by invoking a query:
var mysql = require('mysql');
var connection = mysql.createConnection(...);
connection.query('SELECT 1', function (error, results, fields) {
if (error) throw error;
// connected!
});
Depending on how you like to handle your errors, either method may be appropriate. Any type of connection error (handshake or network) is considered a fatal error, see the Error Handling section for more information.
Connection options
When establishing a connection, you can set the following options:
host: The hostname of the database you are connecting to. (Default:localhost)port: The port number to connect to. (Default:3306)localAddress: The source IP address to use for TCP connection. (Optional)socketPath: The path to a unix domain socket to connect to. When usedhostandportare ignored.user: The MySQL user to authenticate as.password: The password of that MySQL user.database: Name of the database to use for this connection (Optional).charset: The charset for the connection. This is called "collation" in the SQL-level of MySQL (likeutf8_general_ci). If a SQL-level charset is specified (likeutf8mb4) then the default collation for that charset is used. (Default:'UTF8_GENERAL_CI')timezone: The timezone configured on the MySQL server. This is used to type cast server date/time values to JavaScriptDateobject and vice versa. This can be'local','Z', or an offset in the form+HH:MMor-HH:MM. (Default:'local')connectTimeout: The milliseconds before a timeout occurs during the initial connection to the MySQL server. (Default:10000)stringifyObjects: Stringify objects instead of converting to values. (Default:false)insecureAuth: Allow connecting to MySQL instances that ask for the old (insecure) authentication method. (Default:false)typeCast: Determines if column values should be converted to native JavaScript types. (Default:true)queryFormat: A custom query format function. See Custom format.supportBigNumbers: When dealing with big numbers (BIGINT and DECIMAL columns) in the database, you should enable this option (Default:false).bigNumberStrings: Enabling bothsupportBigNumbersandbigNumberStringsforces big numbers (BIGINT and DECIMAL columns) to be always returned as JavaScript String objects (Default:false). EnablingsupportBigNumbersbut leavingbigNumberStringsdisabled will return big numbers as String objects only when they cannot be accurately represented with [JavaScript Number objects] (https://tc39.es/ecma262/#sec-ecmascript-language-types-number-type) (which happens when they exceed the [-2^53, +2^53] range), otherwise they will be returned as Number objects. This option is ignored ifsupportBigNumbersis disabled.dateStrings: Force date types (TIMESTAMP, DATETIME, DATE) to be returned as strings rather than inflated into JavaScript Date objects. Can betrue/falseor an array of type names to keep as strings. (Default:false)debug: Prints protocol details to stdout. Can betrue/falseor an array of packet type names that should be printed. (Default:false)trace: Generates stack traces onErrorto include call site of library entrance ("long stack traces"). Slight performance penalty for most calls. (Default:true)localInfile: AllowLOAD DATA INFILEto use theLOCALmodifier. (Default:true)multipleStatements: Allow multiple mysql statements per query. Be careful with this, it could increase the scope of SQL injection attacks. (Default:false)flags: List of connection flags to use other than the default ones. It is also possible to blacklist default ones. For more information, check Connection Flags.ssl: object with ssl
Related Skills
feishu-drive
328.6k|
things-mac
328.6kManage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database)
clawhub
328.6kUse the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com
asset_management
Amazon Q Developer Guidance for AMBP Quick Start for New Amazon Q Sessions 1. Project Overview AMBP (Asset Management Business Platform) is a modern web-based asset management system bu
