鍍金池/ 問答/C++  數(shù)據(jù)庫  HTML/ node mysql connection.end() 和 connection

node mysql connection.end() 和 connection.destroy()的區(qū)別是什么?

npm mysql 文檔中我們可以看到對connection.end()和connection.destroy()區(qū)別的描述是connection.end()會確保在把COM_QUIT包發(fā)送給mysql服務(wù)器之前執(zhí)行隊(duì)列中的查詢語句,如果在COM_QUIT包發(fā)送之前發(fā)生了致命錯(cuò)誤會把錯(cuò)誤傳遞給回調(diào)函數(shù)的參數(shù)err,但連接無論如何也都是會被中斷的。而destroy()是沒有回調(diào)函數(shù)直接中斷的。(不知道有沒有翻譯對,看了網(wǎng)上一些文章也是大概這么說的)。我的問題是,COM_QUIT發(fā)送前隊(duì)列中的查詢語句指的是什么,這個(gè)隊(duì)列是哪來的,有什么實(shí)際的情景可以說明一下嗎?這兩種終止連接的方式對于用戶有什么不同的影響?如果只是有沒有回調(diào)函數(shù)的區(qū)別,那我要終止連接是兩個(gè)都可以任意使用嗎?

回答
編輯回答
來守候

查詢隊(duì)列指的是什么

在官方文檔的Introduction部分其實(shí)就講到了,文檔傳送門

  • Every method you invoke on a connection is queued and executed in sequence.
  • Closing the connection is done using end() which makes sure all remaining queries are executed before sending a quit packet to the mysql server.

舉例,下面的兩個(gè)調(diào)用,在內(nèi)部是排隊(duì)執(zhí)行的。

connection.query('SELECT * FROM hello');
connection.query('SELECT * FROM world');

end、destroy的區(qū)別

兩者的區(qū)別很明顯,還是以前面的代碼為例子。

1、connection.end():把查詢1、查詢2順利執(zhí)行完,得到查詢結(jié)果后,斷開mysql服務(wù)器的連接。
2、connection.destryo():直接斷開連接,不管還有多少查詢沒執(zhí)行完。

connection.query('SELECT * FROM hello'); // 查詢1
connection.query('SELECT * FROM world'); // 查詢2
2017年12月7日 04:01