node mysql connection.end() 和 connection.destroy()的区别是什么?

npm mysql 文档中我们可以看到对connection.end()和connection.destroy()区别的描述是connection.end()会确保在把COM_QUIT包发送给mysql服务器之前执行队列中的查询语句,如果在COM_QUIT包发送之前发生了致命错误会把错误传递给回调函数的参数err,但连接无论如何也都是会被中断的。而destroy()是没有回调函数直接中断的。(不知道有没有翻译对,看了网上一些文章也是大概这么说的)。我的问题是,COM_QUIT发送前队列中的查询语句指的是什么,这个队列是哪来的,有什么实际的情景可以说明一下吗?这两种终止连接的方式对于用户有什么不同的影响?如果只是有没有回调函数的区别,那我要终止连接是两个都可以任意使用吗?

阅读 5.9k
1 个回答

查询队列指的是什么

在官方文档的Introduction部分其实就讲到了,文档传送门

  • 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.

举例,下面的两个调用,在内部是排队执行的。

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

end、destroy的区别

两者的区别很明显,还是以前面的代码为例子。

1、connection.end():把查询1、查询2顺利执行完,得到查询结果后,断开mysql服务器的连接。
2、connection.destryo():直接断开连接,不管还有多少查询没执行完。

connection.query('SELECT * FROM hello'); // 查询1
connection.query('SELECT * FROM world'); // 查询2
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题