【问题标题】:MySQL Node.js Query Ends, no CallbackMySQL Node.js 查询结束,没有回调
【发布时间】:2020-03-23 09:32:33
【问题描述】:

我将 mysql 用于 node.js。

此查询通过检查是否至少有一行不是NULL,来检查一列是否包含所有NULL 值。

SELECT 1 FROM `table` WHERE `column` IS NOT NULL LIMIT 1

如果该列具有所有NULL 值,则此查询会在几秒钟(~120)后在 SQL 进程列表中结束,但我从未从 js 代码中得到回调:

import {createPool as mysqlCreatePool, MysqlError} from 'mysql';

const db = mysqlCreatePool({...})

const query = db.query(sql, undefined, function (err: MysqlError | null, res?: any) {
  console.log(err, res);
});

query.on('end', () => console.log("end"));

(控制台中不会打印任何内容)

【问题讨论】:

    标签: mysql node.js mysqljs


    【解决方案1】:

    可能不是相同的方法,但会为您提供我认为您所追求的答案并始终返回结果。

    查询count而不是固定值并使用IS NULL而不是IS NOT NULL

    SELECT count(*) AS null_count FROM `table` WHERE `column` IS NULL;
    

    如果您的回复是0,则每条记录都有该列的值。如果您的响应大于0,那么您在该列中有很多具有NULL 值的记录。

    【讨论】:

    • 我知道这总是会得到结果,但是,这在时间上要昂贵得多,因为另一种方法是基于否定的(NOT NULL LIMIT 1)并且工作得非常快。知道为什么我的查询在 nodejs musql 上没有返回任何内容吗?
    • 您可以尝试CASE WHEN 方法的变体。与我之前的示例和您的原始示例相比,我不熟悉性能影响。考虑这种方法:SELECT (column IS NOT NULL) AS null_check FROM table LIMIT 1。在具有约 120k 条记录的远程数据库表上测试 3 个变体中的每一个,都具有类似的 appx 响应时间。 16 毫秒到 18 毫秒。有关替代方法的更多详细信息:(stackoverflow.com/a/9387864/1720873)
    猜你喜欢
    • 2013-04-14
    • 2013-08-24
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    相关资源
    最近更新 更多