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
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.pngps:这里链接是当时另外的一个库,算作是库链接的测试,下面真实表单库还是在 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大神资源。