• Nodejs学习笔记(一)--- 操作Mysql数据库


      对于一门语言的学习,我个人觉得最好的方式就是通过一个项目来展示,所以从基本的一些模块去了解是最好的方式对于Mysql怎么去链接数据库这个我是在网上找到的(其实一直想找官方文档的,发现没有它的踪迹,(后续找到之后还是建议去看官方文档,毕竟那才是最正式的内容),好了,废话不多说,就来进入我今天所学的主题;

       实现来一个简单的例子

      在自己的项目的根目录下执行    npm install mysql  (安装mysql的依赖)

    一 建立连接

    var mysql = require('mysql');
    
    var connection = mysql.createConnection( {
      host: '127.0.0.1',
      user: 'root',
      password: 'root',
      port: '3306',
      database: 'mysql'
      })
    
    
    // 创建一个连接
     connection.connect(function(err) {
       if (err) {
         console.log(err);
         return;
       }
       console.log('mysql connect success')
     })
    
     // 执行sql语句
     connection.query('select count(*) as num from user', function (err, rows) {
       if (err) {
         console.log('query error:' + err)
         return;
       }
       console.log('connection result:' + JSON.stringify(rows))
     })
    
     // 关闭连接
     connection.end(function(err) {
       if(err) {
         console.log('connection end:' + err);
         return;
       }
       console.log('connection close')
     })

    解释: 其中连接的过程就如上所诉,其中创建连接的时候的字段

    host:主机地址 (默认:localhost)

      user:用户名

      password:密码

      port:端口号 (默认:3306)

      database:数据库名

      charset:连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)

      localAddress:此IP用于TCP连接(可选)

      socketPath:连接到unix域路径,当使用 host 和 port 时会被忽略

      timezone:时区(默认:'local')

      connectTimeout:连接超时(默认:不限制;单位:毫秒)

      stringifyObjects:是否序列化对象(默认:'false' ;与安全相关)

      typeCast:是否将列值转化为本地JavaScript类型值 (默认:true)

      queryFormat:自定义query语句格式化方法 

      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:用于修改连接标志

      ssl:使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

    二 实现增删改查

      连接建立了,接下就来实现最简单的增删改查

    数据库

    create table userInfo(
    uid int(11) not null,
    uname varchar(20),
    primary key (uid)
    );

    var mysql = require('mysql');
    
    var connection = mysql.createConnection( {
      host: '47.93.34.145',
      user: 'root',
      password: 'root',
      port: '3306',
      database: 'mysql'
    })
    
    
    // 创建一个连接
    connection.connect(function(err) {
      if (err) {
        console.log(err);
        return;
      }
      console.log('mysql connect success')
    })
    
    // 执行新增sql语句
    connection.query("insert into userInfo values('1', 'yaobo')", function (err, rows) {
      if (err) {
        console.log('query error:' + err)
        return;
      }
      console.log('success !!!');
    })
    // // 执行查询sql语句
    connection.query('select *  from userInfo', function (err, rows) {
      if (err) {
        console.log('error:' + err)
        return;
      }
      console.log('query result:' + JSON.stringify(rows))
    })
    // 执行修改sql语句
    connection.query("update userInfo set uname='yaobo1'", function (err, rows) {
      if (err) {
        console.log('error:' + err)
        return;
      }
      console.log('update success !!!');
    })
    // 执行sql语句
    connection.query('delete from userInfo', function (err, rows) {
      if (err) {
        console.log('error:' + err)
        return;
      }
      console.log('delete success !!!')
    })
    
    // 关闭连接
    connection.end(function(err) {
      if(err) {
        console.log('connection end:' + err);
        return;
      }
      console.log('connection close')
    })
    View Code

    三 实现连接池

      在实际项目中,连接池运用是非常广泛的,他能同时保证多个连接不受影响,极大的提高了运行效率,接下来就来看下nodejs 下是怎么实现的

    var mysql = require('mysql');
    
    var pool = mysql.createPool( {
      host: '47.93.34.145',
      user: 'root',
      password: 'root',
      port: '3306',
      database: 'mysql'
    })
    
    pool.on('connection', function (connection) {
      // 设置服务器session 会话自增长
      connection.query('SET SESSION auto_increment_increment=1')
    })
    
    // 直接使用 (这样写不建议, 每次使用完之后建议释放)
    pool.query('select * from userInfo', function (er, rows) {
      if (er) {
        console.log('er:' + er)
      }
      console.log('connection result:' + JSON.stringify(rows))
    })
    
    
    // 共享 (建议这样写)
    pool.getConnection(function(err, connection) {
      // 这一波还阔以共享
      connection.query('select * from userInfo', function (er, rows) {
        if (er) {
          console.log('er:' + er)
        }
        console.log('connection result:' + JSON.stringify(rows))
      })
    })

    其中创建连接池还有一些其他的参数如下:

           waitForConnections

       当连接池没有连接或超出最大限制时,设置为true且会把连接放入队列,设置为false会返回error

      connectionLimit

       连接数限制,默认:10

      queueLimit

       最大连接请求队列限制,设置为0表示不限制,默认:0

  • 相关阅读:
    【游学】Our trip in Baidu developer conference~
    【招新】Bit Workshop ,requiring new ~Welcome ~
    【web】Modify some style of Diandian blog
    【随谈】The little words is essence~
    【电脑】Enable administrator account in win 7
    【web】What's the hell of diandian ?Why can't recognize the videos ?
    【游学】Fortunately ,photographed with the COO of dolphin browser ,Mr.Wang,and the general mangager of Demo coffee Mr.Yan
    【电脑】Modify the default system guide in win 7
    sql中while遍历更新字段数据
    mysql报ERROR [42000]
  • 原文地址:https://www.cnblogs.com/yaobolove/p/8299025.html
Copyright © 2020-2023  润新知