美文网首页Web前端之路程序员
Nodejs学习笔记(六)--- Mysql连接

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

作者: 秋天de童话 | 来源:发表于2017-07-03 21:34 被阅读122次

    安装

    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
    
    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
    
    image.png 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!');
    });
    
    

    报错:

    image.png

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

    1. GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
    2.FLUSH PRIVILEGES;
    
    image.png

    执行返回显示:

    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!');
    });
    
    image.png

    执行成功:

    image.png

    数据库中显示:

    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!');
    });
    
    
    image.png

    执行结果:

    image.png 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!');
    });
    
    image.png

    执行结果:

    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!');
    });
    
    image.png

    执行结果:

    image.png 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连接

        本文链接:https://www.haomeiwen.com/subject/vtsvcxtx.html