1. 建库连库

连接MySQL数据库需要安装支持

npm install mysql

我们需要提前安装按mysql sever端

建一个数据库mydb1

mysql> CREATE DATABASE mydb1;<br/>
mysql> SHOW DATABASES;<br/>
+--------------------+<br/>
| Database           |<br/>
+--------------------+<br/>
| information_schema |<br/>
| mysql              |<br/>
| mydb1             |<br/>
| performance_schema |<br/>
+--------------------+<br/>
 rows in set (0.00 sec)

然后建一张表user如下

create table user(  <br/>
id int not null primary key auto_increment,  <br/>
name VARCHAR() not null,  <br/>
pwd VARCHAR() not null,<br/>
create_date TIMESTAMP NULL DEFAULT now()<br/>
)ENGINE=InnoDB DEFAULT CHARSET=utf8;  <br/>
CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);

接下来我们利用nodejs连接mysql数据库

 var mysql  = require('mysql');  //调用MySQL模块<br/>
 //创建一个connection  <br/>
 var connection = mysql.createConnection({      <br/>
     host: 'localhost',       //主机  <br/>
     user: 'root',               //MySQL认证用户名  <br/>
     password: 'root',        //MySQL认证用户密码  <br/>
     database: 'mydb1',  <br/>
     port: '3306'                   //端口号  <br/>
 });<br/>
 //创建一个connection  <br/>
 connection.connect(function(err){  <br/>
     if(err){         <br/>
         console.log('[query] - :'+err);  <br/>
         return;  <br/>
     }  <br/>
     console.log('[connection connect]  succeed!');  <br/>
 }); <br/>
 //----插入<br/>
 var userAddSql = 'insert into user (name,pwd) values(?,?)';<br/>
 var param = ['fff','123'];<br/>
 connection.query(userAddSql,param,function(err,rs){<br/>
     if(err){<br/>
         console.log('insert err:',err.message);<br/>
         return;<br/>
     }<br/>
         console.log('insert success');<br/>
 });<br/>
 //执行查询  <br/>
 connection.query('SELECT * from user where id=?',[2], function(err, rs) {  <br/>
     if (err) {  <br/>
         console.log('[query] - :'+err);  <br/>
         return;  <br/>
     } <br/>
     for(var i=0;i<rs.length;i++){<br/>
         console.log('The solution is: ', rs[i].uname); <br/>
     }<br/>
 });   

 //关闭connection  <br/>
 connection.end(function(err){  <br/>
     if(err){ <br/>
         console.log(err.toString());<br/>
         return;  <br/>
     }  <br/>
     console.log('[connection end] succeed!');  <br/>
 }); 

但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连mysql的方法:node-mysql

2. 连接池配置使用

node-mysql是目前最火的node下的mysql驱动,是mysqlpool的一个模块。

下面的代码是提供一个连接池,getPool函数返回createPool创建的数据库连接池对象。

 var mysql  = require('mysql');  //调用MySQL模块 <br/>
 function OptPool(){ <br/>
     this.flag=true; //是否连接过 <br/>
     this.pool = mysql.createPool({     <br/>
         host: 'localhost',       //主机 <br/>
         user: 'root',               //MySQL认证用户名 <br/>
         password: 'root',        //MySQL认证用户密码 <br/>
         database: 'test', <br/>
         port: '3306'                   //端口号 <br/>
     }); <br/>
  <br/>
     this.getPool=function(){ <br/>
         return this.pool; <br/>
     } <br/>
 }; <br/>
 module.exports = OptPool; 

下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是conn.release(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。

 var OptPool = require('./models/OptPool'); <br/>
  <br/>
 var optPool = new OptPool(); <br/>
 var pool = optPool.getPool(); 

 //执行SQL语句 <br/>
 //从连接池中获取一个连接<br/>
 pool.getConnection(function(err,conn){ <br/>
     //----插入 <br/>
     var userAddSql = 'insert into user (uname,pwd) values(?,?)'; <br/>
     var param = ['eee','eee'];<br/>
     conn.query(userAddSql,param,function(err,rs){<br/>
         if(err){ <br/>
             console.log('insert err:',err.message); <br/>
             return; <br/>
         } <br/>
         console.log('insert success'); <br/>
         //conn.release(); //放回连接池<br/>
     })<br/>
     //查询 <br/>
     conn.query('SELECT * from user', function(err, rs) { <br/>
         if (err) { <br/>
             console.log('[query] - :'+err); <br/>
             return; <br/>
         }   <br/>
         for(var i=0;i<rs.length;i++){<br/>
             console.log(rs[i].uname); <br/>
         }<br/>
         conn.release(); //放回连接池<br/>
     });<br/>
 }); 

下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。这样就引出了我们接下来要介绍饿流程控制的内容《nodejs进阶(7)—async异步流程控制

 var OptPool = require('./models/OptPool'); <br/>
  <br/>
 var optPool = new OptPool(); <br/>
 var pool = optPool.getPool(); 

 var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';<br/>
 var selectSQL = 'select * from table1 limit 10';<br/>
 var deleteSQL = 'delete from table1';<br/>
 var updateSQL = 'update table1 set name="conan update"  where name="conan"';

 pool.getConnection(function(err,conn){ <br/>
 //delete<br/>
     conn.query(deleteSQL, function (err0, res0) {<br/>
         if (err0) console.log(err0);<br/>
         console.log("DELETE Return ==> ");<br/>
         console.log(res0);

         //insert<br/>
         conn.query(insertSQL, function (err1, res1) {<br/>
             if (err1) console.log(err1);<br/>
             console.log("INSERT Return ==> ");<br/>
             console.log(res1);

             //query<br/>
             conn.query(selectSQL, function (err2, rows) {<br/>
                 if (err2) console.log(err2);

                 console.log("SELECT ==> ");<br/>
                 for (var i in rows) {<br/>
                     console.log(rows[i]);<br/>
                 }

                 //update<br/>
                 conn.query(updateSQL, function (err3, res3) {<br/>
                     if (err3) console.log(err3);<br/>
                     console.log("UPDATE Return ==> ");<br/>
                     console.log(res3);

                     //query<br/>
                     conn.query(selectSQL, function (err4, rows2) {<br/>
                         if (err4) console.log(err4);

                         console.log("SELECT ==> ");<br/>
                         for (var i in rows2) {<br/>
                             console.log(rows2[i]);<br/>
                         }<br/>
                     });<br/>
                 });<br/>
             });<br/>
         });<br/>
     });<br/>
 })

运行结果