1. 建库连库
连接MySQL数据库需要安装支持
npm install mysql
我们需要提前安装按mysql sever端
建一个数据库mydb1
mysql>CREATE DATABASE mydb1;
mysql>SHOW DATABASES;+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| mydb1 |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
然后建一张表user如下
create table user(
idint not nullprimary key auto_increment,
name VARCHAR(100) not null,
pwd VARCHAR(100) not null,
create_date TIMESTAMP NULL DEFAULT now()
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);
接下来我们利用nodejs连接mysql数据库
1 var mysql = require('mysql'); //调用MySQL模块
2 //创建一个connection
3 var connection =mysql.createConnection({4 host: 'localhost', //主机
5 user: 'root', //MySQL认证用户名
6 password: 'root', //MySQL认证用户密码
7 database: 'mydb1',8 port: '3306' //端口号
9 });10 //创建一个connection
11 connection.connect(function(err){12 if(err){13 console.log('[query] - :'+err);14 return;15 }16 console.log('[connection connect] succeed!');17 });18 //----插入
19 var userAddSql = 'insert into user (name,pwd) values(?,?)';20 var param = ['fff','123'];21 connection.query(userAddSql,param,function(err,rs){22 if(err){23 console.log('insert err:',err.message);24 return;25 }26 console.log('insert success');27 });28 //执行查询
29 connection.query('SELECT * from user where id=?',[2], function(err, rs) {30 if(err) {31 console.log('[query] - :'+err);32 return;33 }34 for(var i=0;i
39 //关闭connection
40 connection.end(function(err){41 if(err){42 console.log(err.toString());43 return;44 }45 console.log('[connection end] succeed!');46 });
但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连mysql的方法:node-mysql
2. 连接池配置使用
node-mysql是目前最火的node下的mysql驱动,是mysqlpool的一个模块。
下面的代码是提供一个连接池,getPool函数返回createPool创建的数据库连接池对象。
1 var mysql = require('mysql'); //调用MySQL模块
2 functionOptPool(){3 this.flag=true; //是否连接过
4 this.pool =mysql.createPool({5 host: 'localhost', //主机
6 user: 'root', //MySQL认证用户名
7 password: 'root', //MySQL认证用户密码
8 database: 'test',9 port: '3306' //端口号
10 });11 12 this.getPool=function(){ return this.pool;21 }22 };23 module.exports = OptPool;
下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是conn.release(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。
1 var OptPool = require('./models/OptPool');2 3 var optPool = newOptPool();4 var pool =optPool.getPool();5
6 //执行SQL语句
7 //从连接池中获取一个连接
8 pool.getConnection(function(err,conn){9 //----插入
10 var userAddSql = 'insert into user (uname,pwd) values(?,?)';11 var param = ['eee','eee'];12 conn.query(userAddSql,param,function(err,rs){13 if(err){14 console.log('insert err:',err.message);15 return;16 }17 console.log('insert success');18 //conn.release(); //放回连接池
19 })20 //查询
21 conn.query('SELECT * from user', function(err, rs) {22 if(err) {23 console.log('[query] - :'+err);24 return;25 }26 for(var i=0;i
30 });31 });
下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。这样就引出了我们接下来要介绍饿流程控制的内容《nodejs进阶(7)—async异步流程控制》
1 var OptPool = require('./models/OptPool');2 3 var optPool = newOptPool();4 var pool =optPool.getPool();5
6 var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';7 var selectSQL = 'select * from table1 limit 10';8 var deleteSQL = 'delete from table1';9 var updateSQL = 'update table1 set name="conan update" where name="conan"';10
11 pool.getConnection(function(err,conn){12 //delete
13 conn.query(deleteSQL, function(err0, res0) {14 if(err0) console.log(err0);15 console.log("DELETE Return ==> ");16 console.log(res0);17
18 //insert
19 conn.query(insertSQL, function(err1, res1) {20 if(err1) console.log(err1);21 console.log("INSERT Return ==> ");22 console.log(res1);23
24 //query
25 conn.query(selectSQL, function(err2, rows) {26 if(err2) console.log(err2);27
28 console.log("SELECT ==> ");29 for (var i inrows) {30 console.log(rows[i]);31 }32
33 //update
34 conn.query(updateSQL, function(err3, res3) {35 if(err3) console.log(err3);36 console.log("UPDATE Return ==> ");37 console.log(res3);38
39 //query
40 conn.query(selectSQL, function(err4, rows2) {41 if(err4) console.log(err4);42
43 console.log("SELECT ==> ");44 for (var i inrows2) {45 console.log(rows2[i]);46 }47 });48 });49 });50 });51 });52 })
运行结果