javascript - 关于用mysql模块连接数据库的一点疑问
问题描述
看实例代码是这样子的;
const mysql = require(’mysql’);exports.base = (sql, data, callback) => { // 创建数据库连接 let connection = mysql.createConnection({host: ’localhost’, //数据库所在的服务器域名或者IPuser: ’root’, //用户名password: ’’, //密码database: ’book’ //数据库名称 }); // 执行连接动作 connection.connect(); // 执行数据库操作 connection.query(sql, data, (err, rows) => {if (err) throw err;callback(rows); }); // 关闭数据库 connection.end();}
感觉应该是下面这样的啊
const mysql = require(’mysql’);exports.base = (sql, data, callback) => { // 创建数据库连接 let connection = mysql.createConnection({host: ’localhost’, //数据库所在的服务器域名或者IPuser: ’root’, //用户名password: ’’, //密码database: ’book’ //数据库名称 }); // 执行连接动作 connection.connect(); // 执行数据库操作 connection.query(sql, data, (err, rows) => {if (err) throw err;callback(rows);// 关闭数据库connection.end(); }); }
就是感觉 数据库关闭连接应该是在查询的回调里面完成啊,如果像第一种写法,查询还没结束,就关闭数据库,是不是不妥呢,这个mysql模块内部原理不是很清楚;望大家解惑啊;
问题解答
回答1:文档:
Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.
所以,调用了end()不会马上关闭连接,要等剩余的查询执行完才关闭,该触发的回调还是触发。destroy()才是直接关闭连接。
具体实现就是把全部操作都放到队列里执行,end()只是把一个Quit操作放入队列,Quit操作执行完之后才真正关闭。
相关文章:
1. vue打包和PHP后台怎样同域名部署配置2. php怎么实现删除文章的同时,同时删除编辑器上传的图片??3. 请问老师?4. dump(Db::query(’SELECT * FROM `user`’));的时候提醒错误。5. 数组排序,并把排序后的值存入到新数组中6. 请问“由于 Cookie “PHPSESSID”的“SameSite”属性设置为“None”,但缺少“Secure”属性,此 Cookie 未来将被拒绝。”请问出现这个问题怎么办?7. 07:08秒,老师讲错了8. php多任务倒计时求助9. 上传多图时,最后一张图为缩略图,想设置第一张图为缩略图怎么解决?10. 请问连接文件怎么写
