Nodejs学习笔记(六)--- Mysql连接

安装

Mysql安装
http://ftp.ntu.edu.tw/MySQL/Downloads/MySQLInstaller/
版本: mysql-installer-community-5.7.17.0.msi
可视化界面工具: MySQL-Front_V5.4.4.153_Setup
安装教程:http://jingyan.baidu.com/article/363872ec2e27076e4ba16fc3.html
关于密码:admin/admin root/admin
http://www.jb51.net/article/71888.htm
http://blog.csdn.net/kindroid/article/details/51018107

Node.js与MySQL交互操作有很多库,具体可以在 https://www.npmjs.org/search?q=mysql 查看。
  地址:https://github.com/felixge/node-mysql
     https://www.npmjs.org/package/mysql

安装
npm install mysql
Nodejs学习笔记(六)--- Mysql连接_第1张图片
image.png

测试MySQL

建库并插入记录
CREATE DATABASE IF NOT EXISTS learn_nodejs CHARACTER SET UTF8;

USE learn_nodejs;

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `UserName` varchar(64) NOT NULL COMMENT '用户名',
  `UserPass` varchar(64) NOT NULL COMMENT '用户密码',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';


show databases
Nodejs学习笔记(六)--- Mysql连接_第2张图片
image.png
Nodejs学习笔记(六)--- Mysql连接_第3张图片
image.png

其他:http://blog.csdn.net/u010882595/article/details/9666819

nodejs连接mysql -- 1_mysql.js
//1_mysql.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection

var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});


//执行sql
connection.query('select 1 AS solution', function(err,rows,fields){
    if(err){
        console.log('connection query err - :'+err);
        return;
    }

        console.log('solution :'+rows[0].solution);
});


//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});

报错:

Nodejs学习笔记(六)--- Mysql连接_第4张图片
image.png

原因:用户未赋权
解决:
主要赋权sql

1. GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
2.FLUSH PRIVILEGES;
Nodejs学习笔记(六)--- Mysql连接_第5张图片
image.png

执行返回显示:

Nodejs学习笔记(六)--- Mysql连接_第6张图片
image.png

ps:这里链接是当时另外的一个库,算作是库链接的测试,下面真实表单库还是在 learn_nodejs,这个当时是上周写的,后来又重新整理下,截图没做修改,意思到了就好,在此做个说明。

Connection Options

host:主机地址 (默认:localhost)
  user:用户名
  password:密码
  port:端口号 (默认:3306)
  database:数据库名
  charset:连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)
  localAddress:此IP用于TCP连接(可选)
  socketPath:连接到unix域路径,当使用 host 和 port 时会被忽略
  timezone:时区(默认:'local')
  connectTimeout:连接超时(默认:不限制;单位:毫秒)
  stringifyObjects:是否序列化对象(默认:'false' ;与安全相关https://github.com/felixge/node-mysql/issues/501)
  typeCast:是否将列值转化为本地JavaScript类型值 (默认:true)
  queryFormat:自定义query语句格式化方法 https://github.com/felixge/node-mysql#custom-format
  supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)
  bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)
  dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false)
  debug:开启调试(默认:false)
  multipleStatements:是否许一个query中有多个MySQL语句 (默认:false)
  flags:用于修改连接标志,更多详情:https://github.com/felixge/node-mysql#connection-flags
  ssl:使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

实现增,删,改,查

//1_mysql.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'tiany_learnnodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});

var  userAddSql = 'INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)';
var  userAddSql_Params = ['tiany', 'tiany'];
//增
connection.query(userAddSql,userAddSql_Params,function (err, result) {
        if(err){
         console.log('INSERT ERROR - ',err.message);
         return;
        }        

       console.log('--------------------------INSERT----------------------------');      
       console.log('INSERT ID:',result);        
       console.log('-----------------------------------------------------------------');  
});

//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});
Nodejs学习笔记(六)--- Mysql连接_第7张图片
image.png

执行成功:

Nodejs学习笔记(六)--- Mysql连接_第8张图片
image.png

数据库中显示:

Nodejs学习笔记(六)--- Mysql连接_第9张图片
image.png

//3_mysql_update.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
  if(err){
    console.log('connection connect err - :'+err);
    return;
  }

    console.log('connection connect success!');
});

var userModSql = 'UPDATE userinfo SET UserName = ?,UserPass = ? WHERE Id = ?';
var userModSql_Params = ['liuzy', 'liuzy',1];
//改
connection.query(userModSql,userModSql_Params,function (err, result) {
   if(err){
         console.log('UPDATE ERROR - ',err.message);
         return;
   }        
  console.log('--------------------------UPDATE----------------------------');
  console.log('UPDATE affectedRows',result.affectedRows);
  console.log('-----------------------------------------------------------------');
});

//关闭 connection
connection.end(function(err){
  if(err){
    console.log('connection end err - :'+err);
    return;
  }

    console.log('connection end success!');
});

Nodejs学习笔记(六)--- Mysql连接_第10张图片
image.png

执行结果:

Nodejs学习笔记(六)--- Mysql连接_第11张图片
image.png
Nodejs学习笔记(六)--- Mysql连接_第12张图片
image.png

//5_mysql_delete.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});

var  userGetSql = 'SELECT * FROM userinfo';
//查
connection.query(userGetSql,function (err, result) {
        if(err){
          console.log('query ERROR - ',err.message);
          return;
        }        

       console.log('--------------------------query----------------------------');
       console.log(result);        
       console.log('---------------------------------------------------------------');  
});

//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});
Nodejs学习笔记(六)--- Mysql连接_第13张图片
image.png

执行结果:

Nodejs学习笔记(六)--- Mysql连接_第14张图片
image.png

//4_mysql_query.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});

var  userDelSql = 'DELETE FROM userinfo';
//删
connection.query(userDelSql,function (err, result) {
        if(err){
          console.log('DELETE ERROR - ',err.message);
          return;
        }        

       console.log('--------------------------DELETE----------------------------');
       console.log('DELETE affectedRows',result.affectedRows);
       console.log('---------------------------------------------------------------');  
});

//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});
Nodejs学习笔记(六)--- Mysql连接_第15张图片
image.png

执行结果:

Nodejs学习笔记(六)--- Mysql连接_第16张图片
image.png
Nodejs学习笔记(六)--- Mysql连接_第17张图片
image.png
结束数据库连接两种方法和区别

结束连接其实有两种方法end(),destory();
  end()
  end()方法在queries都结束后执行,end()方法接收一个回调函数,queries执行出错,仍然后结束连接,错误会返回给回调函数err参数,可以在回调函数中处理!
  destory()
  比较暴力,没有回调函数,即刻执行,不管queries是否完成!

连接池Pooling connections

可以看下:
http://cnodejs.org/topic/58378543bde2b59e06141f5a
以后写到具体项目时会再详细说明。

另外:
在nodejs学习笔记(一)时已经写明笔记参考来源,也算是站在巨人的肩膀上,在此再次附上链接 http://www.cnblogs.com/zhongweiv/p/nodejs_mysql.html ,分享给大家,有兴趣的朋友可以直接去看看,再次感谢porschev大神资源。

使用:http://www.csdn123.com/html/blogs/20130413/2092.htm

你可能感兴趣的:(Nodejs学习笔记(六)--- Mysql连接)