【node】express中mysql的基本⽤法、连接池的使⽤、事务的回滚【node】express中mysql的基本⽤法、连接池的使⽤
安装mysql包
npm install mysql --save
mysql的配置信息
// 数据库配置⽂件
var mysql =require('mysql');
const config ={
host :'localhost',
database :'wish',
username :'root',
password :'123'
}
var connection = ateConnection({
host: config.host,//数据库地址
user: config.username,//⽤户名
password: config.password,//密码
database: config.database,//数据库名称
timezone:'+08:00'
});
mysql基本操作
mysql的基本操作即为:读、写两个操作。读操作⽤SELECT关键字查询出结果之后,返回给html页⾯渲染数据。写操作是html页⾯的< form>标签提交的数据,写⼊mysql数据库。
查询mysql并渲染数据
// 设置‘/’的路由
万维网是一种特殊的网络('/',function getList(req,res){
var sql ='SELECT * FROM wish';
Connection.query(sql,function(err, result){
if(err){
console.log('[SELECT 错误]:', Constant.DEFAULT_ERROR);
}
// 为index页⾯的data变量,赋值为查询结果result
// 之后前端会渲染数据
data:result
})
})
worked中文意思});
mysql插⼊操作
插⼊操作需要借助< form >标签,提⽰点击提交之后,会跳转到另外⼀个页⾯,还是没有ajax⽅便。
⾸先在html页⾯写上< form >标签
<form action="add" method="post" id="form">
<input name="name">
<input name="content">
<button type="submit">提交</button>
</form>
点击submit按钮之后,提交的路由就是‘/add’,在服务器端获取的request.body中会包含name、content参数值。
开始插⼊
router.post('/add',function add(req,res){
if(req.body.name==''&&t==''){
console.log('不可为空');
}
var sql =`INSERT INTO wish VALUES('112','${req.body.name}','${t}','1','')`;
Connection.query(sql,function(err, result){
if(err){
console.log('[SELECT 错误]:', Constant.DEFAULT_ERROR);
}
//这⾥理因写个跳转页⾯
})
});
mysql连接池
为什么要采⽤数据库连接池?
此处引⽤了知乎⽤户:Drol的回答
应⽤程序和数据库建⽴连接的过程是这样的:
1、⾸先通过TCP协议的三次握⼿和数据库服务器建⽴连接,然后发送数据库⽤户账号密码,等待数据库验证⽤户⾝份。
2、完成⽤户⾝份验证后,系统才可以提交SQL语句到数据库执⾏。
3、好了这个时候假设我们不使⽤数据库连接池,那么完成⼀次SQL查询后,我们还要把连接关闭,关闭连接就需要和数据库通信告诉它我们要断开连接了然后再TCP四次挥⼿最后完成关闭。
这个过程中每⼀次发起SQL查询所经历的TCP建⽴连接,数据库验证⽤户⾝份,数据库⽤户登出,TCP断开连接消耗的等待时间都是可以避免的,这明显是⼀种浪费。打个⽐⽅,你去⽹吧去玩游戏,每次去到呢先插⽹线,然后开机登录游戏,玩了⼀会⼉要去上厕所,你就退出游戏,然后关机拔⽹线。去完厕所回来就⼜重新插⽹线开机登游戏。
mysql面试题 知乎有没有觉得上⾯例⼦中的⾏为很扯蛋,所以每次SQL查询都创建链接,查询完后⼜关闭连接这个做法本⾝就很扯蛋。合理的做法就应该是系统启动的时候就创建数据库连接,然后需要使⽤SQL查询的时候,就从系统拿出数据库连接对象并提交查询,查询完了就把连接对象还给系统。系统在整个程序运⾏结束的时候再把数据库连接关闭。考虑到⼀般数据库应⽤都是Web多⽤户并发应⽤,那么只有⼀个数据库连接对象肯定不够⽤,所以系统启动的时候就应该多创建⼏个数据库连接对象供多个线程使⽤,这⼀批数据库连接对象集合在⼀起就被称之为数据库连接池。
数据库连接池就是典型的⽤空间换时间的思想,系统启动预先创建多个数据库连接对象虽然会占⽤⼀定的内存空间,但是可以省去后⾯每次SQL查询时创建连接和关闭连接消耗的时间。
binder烘箱个人网页大全以空间换空间,避免多次TCP/IP的三次握⼿与四次挥⼿。
node中mysql数据库连接池的写法
var mysql =require('mysql');
var pool = atePool({
host :"hostName",
user :"username",
password:"password"
});
connection.query("select * from table1",function(err, rows){
if(err){
throw err;
}else{
console.log( rows );
}
});
});
mysql事务
事务的应⽤场景主要针对多条SQL语句同时操作,其中某⼀条语句发⽣错误,那么数据库应回到之前所有语句还未操作的状态。成为事务的回滚。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论