简介
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
mysql实战
1、安装
$ npm install mysql
2、连接
2.1、创建db配置文件和工具文件
//db_config.js db配置文件
module.exports = {
host: 'host',
user: 'mysql用户名',
password: 'mysql密码',
database: '连接的数据库名字',
port:port,
dateStrings:true
}
//tools.js 工具文件 格式化结果的文件
var tools = {};
module.exports = tools;
tools.formatResult = function(err, result){
if (err){
return {
"status": false,
"data" : err
}
}else {
return {
"status": true,
"data" : result
}
}
}
2.2、3种数据库连接方式
方式一: Establishing connections
//mysql_connection.js
var mysql = require('mysql');
var db_config = require('./db_config');
var tools = require('./tools');
var mysql_connection = {};
module.exports = mysql_connection;
var connection = mysql.createConnection(db_config);
mysql_connection.query = function(sql){
return new Promise(function (resolve) {
connection.query(sql, function (error, results, fields) {
//当查询完毕,结束连接,这种方式比较推荐,会有回调函数
connection.end(function(err) {
// The connection is terminated now
if(err){
console.log(err);
}else {
console.log('end');
}
});
//当查询完毕,结束连接,这种方式会立即断开连接,并不会有回调函数
//connection.destroy();
//打印数据
console.log(results);
//console.log(fields);
resolve(tools.formatResult(error, results));
});
});
}
//mysql_demo.js 使用方法
//每次都创建一个连接,执行完就断开连接
var mysql_connection = require('./mysql_connection');
var getInfo1 = async function(){
var sql = 'select * from wx_users_relation';
var result = await mysql_connection.query(sql);
console.log(result.data[0].open_id);
}
//当connection.end来关闭连接时,可以多次调用异步方法来进行多次数据库操作
//原因: 因为异步运行中,connection在完成数据库操作一次后,用connection.end来关闭连接时,不会关闭连接,而是返回错误
getInfo1();
getInfo1();
getInfo1();
//这种方式不能进行多次查询 只能查询一次
//原因: 因为同步运行中,connection在完成数据库操作一次后就断开连接了
//var run1 = async function(){
// await getInfo1();
// await getInfo1();
// await getInfo1();
//}
//
//run1();
方式二: Pooling connections
//mysql_pool.js
var mysql = require('mysql');
var db_config = require('./db_config');
var tools = require('./tools');
var mysql_pool = {};
module.exports = mysql_pool;
var pool = mysql.createPool(db_config);
//断开连接
function _release(connection) {
try {
connection.release();
} catch (err) {
console.log('DB-关闭数据库连接异常!- 2: ' + err);
}
}
//执行sql语句
mysql_pool.query = function(sql, values) {
return new Promise(function (resolve) {
pool.getConnection(function(err, connection){
if (err) {
throw 'DB-获取数据库连接异常:'+err;
} else {
connection.query(sql, values, function(err, rows) {
_release(connection);
resolve(tools.formatResult(err, rows));
});
}
});
});
}
//关闭连接池
mysql_pool.end = function(){
pool.end(function (err) {
if(err){
console.log('连接池关闭错误: ' + err);
}else {
console.log('连接池关闭成功');
}
// all connections in the pool have ended
});
}
//mysql_demo.js
// 提供连接池来支持创建和管理一个个连接,适合并发高的连接方式
var mysql_pool = require('./mysql_pool');
var getInfo2 = async function (){
var sql = 'select * from wx_users_relation';
var result = await mysql_pool.query(sql, '');
console.log(result.data[0].open_id);
}
//必须同步执行代码,否则会提前结束线程池
var run2 = async function(){
await getInfo2();
await getInfo2();
await getInfo2();
//当一个个连接结束湿,结束线程池
mysql_pool.end();
}
run2();
方式三: PoolCluster
//mysql_poolCluster.js
var mysql = require('mysql');
var db_config = require('./db_config');
var tools = require('./tools');
var mysql_poolCluster = {};
module.exports = mysql_poolCluster;
//PoolCluster 提供多个主机连接
var poolCluster = mysql.createPoolCluster();
poolCluster.add('MASTER', db_config); // add a named configuration
//断开连接
function _release(connection) {
try {
connection.release();
} catch (err) {
console.log('DB-关闭数据库连接异常!- 2: ' + err);
}
}
// Target Group : MASTER, Selector : round-robin
//执行sql语句
mysql_poolCluster.query = function(sql, values) {
return new Promise(function (resolve) {
poolCluster.getConnection('MASTER', function (err, connection) {
if (err) {
throw 'DB-获取数据库连接异常:'+err;
} else {
connection.query(sql, values, function(err, rows) {
_release(connection);
resolve(tools.formatResult(err, rows));
});
}
});
});
}
//关闭poolCluster
mysql_poolCluster.end = function(){
// close all connections
poolCluster.end(function (err) {
if(err){
console.log('poolCluster 关闭错误: ' + err);
}else {
// all connections in the pool cluster have ended
console.log('poolCluster 关闭成功');
}
});
}
//mysql_demo.js
// poolCluster 提供多个主机连接
var mysql_poolCluster = require('./mysql_poolCluster');
var getInfo3 = async function (){
var sql = 'select * from wx_users_relation';
var result = await mysql_poolCluster.query(sql, '');
console.log(result.data[0].open_id);
}
//必须同步执行代码,否则会提前结束线程池
var run3 = async function(){
await getInfo3();
await getInfo3();
await getInfo3();
//当一个个连接结束湿,结束线程池
mysql_poolCluster.end();
}
run3();
最后
出文不出码,只能码代码。
源码传送门
最后,如果觉得我的文章对你有些许的帮助,请帮忙点个赞。