文章结构
mysql 连接数据库mysql的驱动说明
mysql的兼容升级npm包mysql2,mysql2兼容mysql的api语法。使用起来没有太大的
差别,但是mysql2在性能上面提升很大
mysql npm地址与文档地址
我们从文档中提取一点重点
mysql连接的配置信息
// db.config.js// 创建mysql连接
module.exports ={host:'localhost',// 服务器地址user:'******',// mysql用户名称password:'******',// mysql用户密码port:'3306',// 端口database:'todolist',// 数据库名称}
封装mysql的语句执行方法
// db.js const mysql =require('mysql2');const dbConfig =require('./db.config');
module.exports ={query:function(sql, params, callback){//每次使用的时候需要创建链接,数据操作完成之后要关闭连接const connection = mysql.createConnection(dbConfig)
connection.connect(function(err){if(err){throw err
}//开始数据操作
connection.query(sql, params,function(err, results, fields){if(err){throw err
}//将查询出来的数据返回给回调函数
callback &&callback(JSON.parse(JSON.stringify(results)),JSON.parse(JSON.stringify(fields)))//停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
connection.end(function(err){if(err){
console.log('关闭数据库连接失败!')throw err
}})})})},}
router.get('/userList',(req, res, next)=>{// sql查询user表
db.query('select * from list',[],function(results, fields){// 以json的形式返回
res.json({ results })})})
query的两种查询
connection.query('SELECT * FROM `books` WHERE `author` = "David"',function(error, results, fields){// error will be an Error if one occurred during the query// results will contain the results of the query// fields will contain information about the returned results fields (if any)});
connection.query('SELECT * FROM `books` WHERE `author` = ?',['David'],function(error, results, fields){// error will be an Error if one occurred during the query// results will contain the results of the query// fields will contain information about the returned results fields (if any)});
获取受影响的行数
// 您可以从插入、更新或删除语句中获取受影响的行数。
connection.query('DELETE FROM posts WHERE title = "wrong"',function(error, results, fields){if(error)throw error;
console.log('deleted '+ results.affectedRows +' rows');})
获取更改的行数
您可以从更新语句中获取更改的行数。“changedRows”与“affectedRows”的不同之处在于它不计算值未更改的更新行。
connection.query('UPDATE posts SET ...',function(error, results, fields){if(error)throw error;
console.log('changed '+ results.changedRows +' rows');})
多语句查询
// 句查询会被SQL注入,如果确定想使用可以开启var connection = mysql.createConnection({multipleStatements:true});
事务
// 开启一个简单的事务
connection.beginTransaction(function(err){if(err){throw err;}
connection.query('INSERT INTO posts SET title=?', title,function(error, results, fields){if(error){return connection.rollback(function(){throw error;});}var log ='Post '+ results.insertId +' added';
connection.query('INSERT INTO log SET data=?', log,function(error, results, fields){if(error){return connection.rollback(function(){throw error;});}
connection.commit(function(err){if(err){return connection.rollback(function(){throw err;});}
console.log('success!');});});});});
Exception Safety 类型重铸
为方便起见,默认情况下,此驱动程序会将 mysql 类型转换为原生 JavaScript 类型。
mysqljavascriptTINYINTNumberSMALLINTNumberINTNumberMEDIUMINTNumberYEARNumberFLOATNumberDOUBLENumberTIMESTAMPDateDATEDateDATETIMEDateTINYBLOBBufferMEDIUMBLOBBufferLONGBLOBBufferBLOBBufferBINARYBufferVARBINARYBufferBIT (last byte will be filled with 0 bits as necessary)BuffercharStringvarcharStringtinytextStringmediumtextStringlongtextStringtextStringenumStringsetStringdecimalStringbigintStringtimeStringgeometryString
具体操作演示
使用express-generator来快速搭建一个项目
简单了解一下express-generator
后端路由文件
var express =require('express');var router = express.Router();const db =require('../conf/db');/* GET home page. */
router.get('/',function(req, res, next){
res.send("<h1>123</h1>")});
router.get('/userList',(req, res, next)=>{// sql查询user表
db.query('select * from list',[],function(results, fields){// 以json的形式返回
res.json({ results })})})
module.exports = router;
数据库配置文件
// db.config.js// 创建mysql连接
module.exports ={host:'localhost',// 服务器地址user:'******',// mysql用户名称password:'******',// mysql用户密码port:'3306',// 端口database:'todolist',// 数据库名称}
封装mysql查询函数
// db.js const mysql =require('mysql2');const dbConfig =require('./db.config');
module.exports ={query:function(sql, params, callback){//每次使用的时候需要创建链接,数据操作完成之后要关闭连接const connection = mysql.createConnection(dbConfig)
connection.connect(function(err){if(err){throw err
}//开始数据操作
connection.query(sql, params,function(err, results, fields){if(err){throw err
}//将查询出来的数据返回给回调函数
callback &&callback(JSON.parse(JSON.stringify(results)),JSON.parse(JSON.stringify(fields)))//停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
connection.end(function(err){if(err){
console.log('关闭数据库连接失败!')throw err
}})})})},}
启动项目
查看数据库
浏览器/postman调用
因为是get请求,其实可以直接在浏览器中调用,但是postman功能更丰富。
版权归原作者 王元肉 所有, 如有侵权,请联系我们删除。