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. macos - mac下docker如何設置代理2. docker - 各位電腦上有多少個容器啊?容器一多,自己都搞混了,咋辦呢?3. docker不顯示端口映射呢?4. java - 請問在main方法中寫成對象名.屬性()并賦值,與直接參參數賦值輸錯誤是什么原因?5. MySQL數據庫中文亂碼的原因6. 關docker hub上有些鏡像的tag被標記““This image has vulnerabilities””7. android studio總是在processes running好久8. mysql - 新浪微博中的關注功能是如何設計表結構的?9. docker-compose 為何找不到配置文件?10. dockerfile - 我用docker build的時候出現下邊問題 麻煩幫我看一下
