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: '',
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')
})
三 实现连接池
在实际项目中,连接池运用是非常广泛的,他能同时保证多个连接不受影响,极大的提高了运行效率,接下来就来看下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
Nodejs学习笔记(一)--- 操作Mysql数据库的更多相关文章
- python学习笔记之——操作mysql数据库
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...
- Python学习笔记9-Python 链接MySql数据库
Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...
- C#学习笔记---C#操作SQL数据库
C#操作SQL数据库 Connection(连接)对象 连接字符串: 形式1.”server=;uid=;pwd=;database=” 形式2.”server=;Intergrated Securi ...
- C++学习笔记13_操作MySql
1. 链接Mysql #include <winsock.h>#include "mysql.h"#include <stdlib.h>#include & ...
- robot framework学习笔记之七—连接mysql数据库
1.安装Database-Library 输入命令:pip install robotframework_databaselibrary 2.添加Database的Library 3.实例 * ...
- 全栈项目|小书架|服务器开发-NodeJS 中使用 Sequelize 操作 MySQL数据库
安装 官网:https://sequelize.org/v5/manual/getting-started.html 安装sequelize及数据库连接驱动 npm install --save se ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
- php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库
1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo mysql扩展库与mysql数据库 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
随机推荐
- [教学] Delphi IDE 文件搜寻功能
Delphi IDE 提供了一个方便的文件搜寻功能,操作如下: 点 Search 选单内的 Find in Files... 例如我们想搜寻 JFile 需要引用那一个源码,可输入如下: 输入关键字: ...
- 大数据Hadoop的HA高可用架构集群部署
1 概述 在Hadoop 2.0.0之前,一个Hadoop集群只有一个NameNode,那么NameNode就会存在单点故障的问题,幸运的是Hadoop 2.0.0之后解决了这个问题,即支持N ...
- Zeta--S3 Linux使用PCCAM/WEBCAM模式
#include <ZetaCameraInterface.h> #include <ZetaMediaPlayInterface.h> using namespace zet ...
- Python--通过索引excel表将文件进行文件夹分类的脚本+读取指定目录下所有文件名的脚本
1.通过索引excel表将文件进行文件夹分类的脚本,此脚本由于将ip和id对应并生成对应id的文件夹将文件进行分类,也可以任意规定表格内容,通过vul_sc_ip.txt和xlsx文件进行索引. # ...
- [Golang学习笔记] 03 库源码文件
库源码文件:不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用. 代码包声明的基本规则: 1. 同目录下的源码文件的代码包声明语句要一致.也就是说,它们要同属于一个代码包( ...
- Windows下安装配置MinGW GCC调试环境
下载安装文件:Sourceforge 64位系统安装选项记得选x86_64.安装过程中连不上服务器的话也可以选择下载压缩包. 配置环境变量,假设mingw安装目录为C:\mingw-w64\ming ...
- springMVC补充——springMVC的表单标签
同其他标签一样,使用标签的第一步是进行标签库的导入(如果页面频繁导入比较多的标签库,应当专门建立导入标签库的页面,详见ztree的随笔) 导入标签库: <%@ taglib prefix=&qu ...
- WPF中使用WindowChrome自定义窗口中遇到的最大化问题
FrameWork 4.5 之后,内置了WindowChrome类,官方文档: https://msdn.microsoft.com/en-us/library/system.windows.shel ...
- kali2.0下JAVA安装
参考网址:http://www.blackmoreops.com/2013/10/26/how-to-install-java-jdk-in-kali-linux/ 1.下载javase,http:/ ...
- docker error:/root/.docker/config.json: is a directory
问题: 本地没有taskworker镜像,docker从远端拉取,但是拉取时需要读取config.json配置,解析配置时,发现config.json是个目录,错误信息如下: taskworker_1 ...