转载至:https://itbilu.com/nodejs/npm/NyPG8LhlW.html#multiple-statement-query
node-mysql是一个实现了MySQL协议的Node.js JavaScript客户端,通过这个模块可以与MySQL数据库建立连接、执行查询等操作,以下是根据官方文档整理的一些模块相关介绍。
1. 连接
1.1 建立连接
安装node-mysql模块后,就可以使用这个模块连接MySQL数据库。建立连接可以使用createConnection()方法创建连接对象,再使用connect()建立连接:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'itbilu.com',
user : 'example',
password : 'secret',
database : 'haha'
});
connection.connect(function(err) {
if (err) {
console.error('连接错误: ' + err.stack);
return;
}
console.log('连接ID ' + connection.threadId);
});
建立连接也可以隐式的由查询自动创建:
var connection = mysql.createConnection(...);
connection.query('SELECT 1', function(err, rows) {
// 如果没有错误,则会连接成功!
});
1.2 连接选项
在创建连接时,需要传入一些选项。可传入的选项参数如下:
host-连接主机名(默认为localhost)
port-连接端口号(默认为3306)
localAddress-使用TCP连接时的IP地址
socketPath-unix域套接字路径,使用这个选项会忽略host和port选项
user-MySql连接用户名
password-MySql连接密码
database-要连接的数据库
charset-连接使用的字符编码(默认UTF8_GENERAL_CI)
timezone-连接使用的时区(默认local)
connectTimeout-连接超时时间(默认10000毫秒)
stringifyObjects-使用Stringify代替转换值
insecureAuth-允许连接到MySQL实例(旧方法)
typeCast-列值是否转换为本地JavaScript类型(默认true)
queryFormat-自定义查询格式函数
supportBigNumbers-处理大数字(BIGINT和DECIMAL)时需要启动此项(默认false)
bigNumberStrings-使用supportbignumbers和bignumberstrings时总是返回JavaScript字符串对象(默认false)
dateStrings-强制日期格式(TIMESTAMP, DATETIME, DATE)使用JavaScript日期对象(默认false)
debug-打印协议详细到stdout(默认false)
trace-生成堆栈错误跟踪信息(默认true)
multipleStatements-允许每个查询使用多个查询语句(默认false)
flags-使用默认值以外的连接标记列表
ssl-使用SSL连接对象
连接参数也可以一个查询字符串的形式:
var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');
SSL连接
SSL连接选项可以是一个对象或字符串。当是一个对象时,其选项和tls.createSecureContext()方法选项一样,当是字符串时将返回一个预定义的SSL配置。
var connection = mysql.createConnection({
host : 'localhost',
ssl : {
ca : fs.readFileSync(__dirname + '/mysql-ca.crt')
}
});
1.3 关闭连接
关闭数据库连接可以使用两种方法。
通过end()方法,在执行结束后关闭连接:
connection.end(function(err) {
// The connection is terminated now
});
别一种方式是使用destroy()方法,这个方法会立即关闭连接套接字,而不管执行是否完毕,且这个方法不end()方法没有回调函数:
connection.destroy();
1.4 切换用户和改变连接
MySQL可以在当前不关闭套接字的情况下切换用户和改变连接,通过changeUser()方法能够实现这一功能:
connection.changeUser({user : 'john'}, function(err) {
if (err) throw err;
});
调用这一方法时可以传入一个包含以下可选值的对象:
user-新用户的用户名(默认为之前用户)
password-新用户的密码(默认为之前用户密码)
charset-新连接的编码(默认为之前连接的字符编码)
database-新连接的数据库(默认为之前数据库)
2. 连接池
数据库连接是一种有限的,能够显著影响到整个应用程序的伸缩性和健壮性的资源,在多用户的网页应用程序中体现得尤为突出。
数据库连接池正是针对这个问题提出来的,它会负责分配、管理和释放数据库连接,允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个连接,释放空闲时间超过最大允许空闲时间的数据库连接以避免因为连接未释放而引起的数据库连接遗漏。
数据库连接池能明显提高对数据库操作的性能,node-mysql同样支持建立连接池连接。
2.1 连接池连接
通过createPool()方法可以使用连接池连接:
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'itbilu.com',
user : 'example',
password : 'secret'
});
pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
通过getConnection()方法连接可以共享一个连接,或管理多个连接:
var mysql = require('mysql');
var pool &#