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. javascript - 按鈕鏈接到另一個網址 怎么通過百度統計計算按鈕的點擊數量2. sql語句 - 如何在mysql中批量添加用戶?3. mysql 可以從 TCP 連接但是不能從 socket 鏈接4. mysql - PHP定時通知、按時發布怎么做?5. 怎么php怎么通過數組顯示sql查詢結果呢,查詢結果有多條,如圖。6. mysql - JAVA怎么實現一個DAO同時實現查詢兩個實體類的結果集7. 事務 - mysql共享鎖lock in share mode的實際使用場景8. mysql建表索引問題求助9. mysql - 數據庫建字段,默認值空和empty string有什么區別 11010. mysql 非主鍵做范圍查找實現原理的一點困惑
