首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何重复执行nodejs mysql查询直到得到想要的结果?

在Node.js中,可以使用循环或递归的方式来重复执行MySQL查询,直到得到想要的结果。下面是一个示例代码:

代码语言:txt
复制
const mysql = require('mysql');

// 创建数据库连接
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'database_name'
});

// 执行查询函数
function executeQuery(query, callback) {
  connection.query(query, (error, results) => {
    if (error) {
      callback(error, null);
    } else {
      callback(null, results);
    }
  });
}

// 定义查询条件和期望结果
const query = 'SELECT * FROM table_name WHERE condition';
const expectedResults = 'desired_results';

// 定义重复执行查询的函数
function repeatQuery() {
  executeQuery(query, (error, results) => {
    if (error) {
      console.error(error);
    } else {
      if (results === expectedResults) {
        console.log('Desired results obtained:', results);
        connection.end(); // 关闭数据库连接
      } else {
        console.log('Results not yet obtained. Repeating query...');
        repeatQuery(); // 继续重复执行查询
      }
    }
  });
}

// 开始重复执行查询
repeatQuery();

上述代码中,首先创建了一个MySQL数据库连接,并定义了一个执行查询的函数executeQuery。然后,定义了要执行的查询语句query和期望的结果expectedResults

接下来,通过repeatQuery函数来重复执行查询。在每次执行查询后,判断结果是否与期望结果相符,如果相符则输出结果并关闭数据库连接,否则继续重复执行查询。

请注意,上述代码仅为示例,实际应用中可能需要根据具体情况进行适当的修改和优化。

关于Node.js和MySQL的更多信息,你可以参考腾讯云的相关产品和文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL】面试官:如何查询和删除MySQL重复记录?

写在前面 最近,有小伙伴出去面试,面试官问了这样一个问题:如何查询和删除MySQL重复记录?相信对于这样一个问题,有不少小伙伴会一脸茫然。那么,我们如何来完美的回答这个问题呢?...今天,我们就一起来探讨下这个经典MySQL面试题。 问题分析 对于标题中问题,有两种理解。第一种理解为将标题问题拆分为两个问题,分别为:如何查询MySQL重复记录?...如何删除MySQL重复记录?另一种理解为:如何查询并删除MySQL重复记录? 没关系,不管怎么理解,我们今天都要搞定它!! 为了小伙伴们更好理解如何在实际工作中解决遇到类似问题。...这里,我就不简单回答标题问题了,而是以SQL语句来实现各种场景下,查询和删除MySQL数据库中重复记录。...1、对于第一种重复,比较容易解决,使用 select distinct * from tableName 就可以得到重复记录结果集。

5.9K10

MySQL架构(一)SQL 查询语句是如何执行

SQL 查询执行流程 SELECT * FROM user WHERE id=1; 当我们在客户端执行这个查询语句时,会得到一条 user 表中 id 为 1 数据。...但这整个过程我们并不知道,你可以先想一下,如何去拿到 id=1 数据。 我们往下看,SQL 查询过程具体流程如下图。...若是该查询语句不在查询缓存中,就会执行后面的阶段。待执行完成后,查询结果会被存入查询缓存中。 我们可以看到,若是查询语句在缓存中,就不需要执行后续复杂操作,可以高效率获取查询结果。...调用存储引擎接口取目标表第一行,判断是否满足条件,若不是则跳过,若是则将这行存在结果集中; 调用存储引擎接口取下一行,重复第 1 步判断逻辑,直到取到这个表最后一行; 执行器将上述遍历过程中所有满足条件行组成记录集作为结果集返回给客户端...当 MySQL结果集返回给客户端,查询语句就已经执行完了。 补充 权限检查:分析器语法分析过程会做权限预检查(precheck),包括检查用户对数据库、表权限。

10810

MySQL实战 | MySQL逻辑架构—一条查询SQL是如何执行

执行如下SQL,我们看到只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部执行过程。...MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行语句及其结果可能会以 key-value 对形式,被直接缓存在内存中。...执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。...调用引擎接口取“下一行”,重复相同判断逻辑,直到取到这个表最后一行。...Archive引擎支持行级锁和专用缓冲区,所以可以实现高并发插入。在一个查询开始直到返回表中存在所有行之前,Archive引擎会阻止其他select执行,以实现一致性读。

1.1K30

MySQL实战 -- 一条SQL查询语句是如何执行

比如,你有个最简单表,表里只有一个 ID 字段,在执行下面这个查询语句时: mysql> select * from T where ID=10; 我们看到只是输入一条语句,返回一个结果,却不知道这条语句在...MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行语句及其结果可能会以 key-value 对形式,被直接缓存在内存中。...key 是查询语句,value 是查询结果。如果你查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。 如果语句不在查询缓存中,就会继续后面的执行阶段。...执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。 但是大多数情况下我会建议你不要使用查询缓存,为什么呢?...调用引擎接口取“下一行”,重复相同判断逻辑,直到取到这个表最后一行。

1.5K30

Mysql实战之一条SQL查询语句是如何执行

sql,都会说,很简单一个查询语句,执行结果查询order表中id=10所有数据,但是大家知道这个sql在Mysql内部是如何执行吗?...接下来,我就把一一给大家进行讲解,mysql执行过程3.Mysql架构图图片mysql整体分为两层:Server层和存储引擎层其中Server层包括连接器、分析器、优化器、执行器等,包含了Mysql...当过多用户访问数据库时候,会导致内存膨胀,最终产生OOM,让mysql宕机解决方案:定期断开长连接如果发现比较大请求时,执行完请求,刷新一下连接4.查询缓存连接建立完成后,就开始执行sql语句了,首先会执行查询缓存执行...sql语句会先走缓存,如果命中缓存,就直接返回结果,如果没有命中缓存,则继续往下执行由于在mysql8.0之后查询缓存模块已经被删除,咱们也就不详细讲解这一块了5....在判断t2里面d值是否等于20既可以先从表t2里面取出d=20记录id值,在根据id值关联表t1,在判断t1里面c值是否等于10 上面两种执行方法最终结果是一样,但是执行效率确不相同,优化器作用就是决定使用哪一种执行方法

1.1K10

MySQL实战第一讲 - 一条SQL查询语句是如何执行

比如,你有个最简单表,表里只有一个 ID 字段,在执行下面这个查询语句时: select * from T where ID=10; 我们看到只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL...MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行语句及其结果可能会以 key-value 对形式,被直接缓存在内存中。...执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。 但是大多数情况下我会建议你不要使用查询缓存,为什么呢?...开始执行时候,要先判断一下你对这个表 T 有没有执行查询权限,如果没有,就会返回没有权限错误。如下所示 (在工程实现上,如果命中查询缓存,会在查询缓存返回结果时候,做权限验证。...调用 InnoDB 引擎接口取这个表第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中; 2. 调用引擎接口取“下一行”,重复相同判断逻辑,直到取到这个表最后一行。

54830

浅谈MySQL并发控制:隔离级别、锁与MVCC

; 如果一个事务根据一些条件查询到一些记录,之后另一事物向表中插入了一些记录,原先事务以相同条件再次查询时发现得到结果跟第一次查询得到结果不一致,这就意味着发生了幻读。...如果某个版本记录经过以上步骤判断确定其对当前事务可见,则查询结果返回此版本记录;否则读取下一个版本记录继续按照上述步骤进行判断,直到版本链尾结点。...,其结果都是一样,这样就实现了可重复读。...,因此在后续进行写操作时就有可能写入基于版本链中旧数据计算得到结果,这就导致了提交覆盖问题。...想要避免此问题,就需要另外加锁来实现。 当前读 之前提到MySQL有两种锁定读方式: SELECT ...

1.6K101

理解MySql事务隔离机制、锁以及各种锁协议

那么如何挑选合适时机阻塞操作执行,又如何保证在调度过程执行完成后其执行结果与串行执行操作结果相同呢?...在MySqlInnoDB下,虽然这种操作不被允许,但MySQL不会阻塞住数据查询操作,而是会查询出数据被修改之前备份,返回给客户端。...在Read Committed下,允许一个事务中多次相同查询得到不同结果,就是所谓不可重复读问题。...反过来说,这一级别下,不允许事务读取在该事务开始后新提交数据。即防止了不可重复发生。 依靠上面的机制,已经做到了在事务内数据内容不变,但是不能保证多次查询得到数据数量一致。...因为在一个事务执行过程中别的事务完全可以执行数据插入,当插入了刚好符合查询条件数据时,就会引发数据查询结果集增加,引发幻读。

1.4K90

《sql必知必会》——读书笔记(1)

二、mysql 检索数据 1.去掉重复行 Disinct使用注意点: a....如果我们使用是左连接,右连接或者全连接,就会涉及到外部行,也就是在虚拟表vt1-2基础上增加外部行,得到虚拟表vt1-3; 当然,如果我们操作是两张表以上表,还会重复上面的步骤,直到所有表都被处理完为止...这个过程得到是我们原始数据。 当我们拿到了查询数据表原始数据,也就是最终虚拟表vt1,就可以在此基础上再进行where阶段。在这个阶段中,会根据vt1表结果进行筛选过滤,得到表vt2....首先,在select阶段会提取想要字段,然后在distinct阶段过滤掉重复行,分别得到中间虚拟表vt5-1和vt5-2; 当我们提取了想要字段数据后,就可以按照指定字段进行排序,也就是order...by阶段,得到虚拟表vt6; 最后在vt6基础上,取出指定行记录,也就是limit阶段,得到最终结果,对应是虚拟表vt7; 当然,我们在写select语句时候,不一定存在所有的关键字,相应阶段就会省略掉

1.3K20

值得收藏,揭秘 MySQL 多版本并发控制实现原理

脏读:一个事务读取到了另外一个事务没有提交数据; 不可重复读:在同一事务中,两次读取同一数据,得到内容不同; 幻读:同一事务中,用同样操作读取两次,得到记录数不相同。...在 MySQL 中,默认隔离级别是可重复读,可以解决脏读和不可重复问题,但不能解决幻读问题。...一致性读也被称为快照读,当我们查询数据库在某个时间点快照时,只能看到这个时间点之前事务提交更新结果,而不能看到这个时间点之后事务提交更新结果。...比如当我们读到 A 有 1000 元时候,此时 B 开始执行给 A 转账。 四、InnoDB如何实现MVCC?...当查询一条记录时候,执行流程如下: 首先获取事务自己版本号,也就是事务 ID; 获取 Read View; 查询得到数据,然后与 Read View 中事务版本号进行比较; 如果不符合 ReadView

68040

如何正确使用 order by

, select birth_city, name, age from t where birth_city = '西安' order by name desc limit 1000; 这个查询语句是如何执行呢...从索引birth_city获取下一个满足条件记录id。 重复步骤3,4 直到不满足查询条件为止。 现在sort_buffer 中已经存放了满足条件数据,然后按照字段name 进行排序。...从索引birth_city获取下一个满足条件记录id。 重复步骤3,4 直到不满足查询条件为止。 现在sort_buffer 中已经存放了满足条件数据,然后按照字段name 进行排序。...从索引city_user获取下一个满足条件记录id。 重复步骤2,3直到获得1000条记录为止。...感谢大家阅读,如果对MySQL想要有深入了解,可以购买下书。 如果对你有帮助,分享,收藏,赞,在看走一波。

1.9K20
领券