gpt4 book ai didi

python - 完全相同的 MYSQL 查询,一致地返回两个不同的结果

转载 作者:行者123 更新时间:2023-11-29 07:26:24 25 4
gpt4 key购买 nike

可以在下图中看到错误。有效地运行完全相同的 sql 查询,将返回两个不同的响应 here .

mysql> select * from BTC_USDT_binance where id >= 56057162 and id < 56057791 and bidAsk = 1 order by id asc limit 2000;
Empty set (0.00 sec)

mysql> select * from BTC_USDT_binance where id >= 56057162 and id < 56057791 and bidAsk = 1 order by id asc limit 2000;
+----------+------------------------+---------+----------+--------+-------+
| id | date | price | volume | bidAsk | reset |
+----------+------------------------+---------+----------+--------+-------+
| 56057163 | 2018-11-27 00:49:46.63 | 3848.26 | 0.201554 | | |
| 56057164 | 2018-11-27 00:49:46.63 | 3835.31 | 0 | | |
| 56057168 | 2018-11-27 00:49:47.64 | 3848.27 | 2.1 | | |
| 56057175 | 2018-11-27 00:49:48.64 | 3848.3 | 0.086733 | | |
| 56057176 | 2018-11-27 00:49:48.64 | 3848.27 | 0 | | |
| 56057177 | 2018-11-27 00:49:48.64 | 3848.31 | 0.085672 | | |

展示它的第二张图片:

mysql> select COUNT(*) from BTC_USDT_binance where id >= '56057162' and id < '56057791' and bidAsk = 0;
+----------+
| COUNT(*) |
+----------+
| 316 |
+----------+
1 row in set (0.00 sec)

mysql> select COUNT(*) from BTC_USDT_binance where id >= '56057162' and id < '56057791' and bidAsk = 0;
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)

mysql> select COUNT(*) from BTC_USDT_binance where id >= '56057162' and id < '56057791' and bidAsk = 0;
+----------+
| COUNT(*) |
+----------+
| 316 |
+----------+
1 row in set (0.00 sec)

mysql> select COUNT(*) from BTC_USDT_binance where id >= '56057162' and id < '56057791' and bidAsk = 0;
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)

mysql> select COUNT(*) from BTC_USDT_binance where id >= '56057162' and id < '56057791' and bidAsk = 0;
+----------+
| COUNT(*) |
+----------+
| 316 |
+----------+
1 row in set (0.00 sec)

对此的注释/观察:

我已经关闭了其他连接,根本没有存储到表中。它每隔一段时间就会发生一次——这意味着如果我运行一次,它将返回一个结果(通常是一个大型查询/几千个响应的结果),如果我再次查询它,它将返回另一个(一条记录) .

请注意,这与主键的空间限制或任何相关内容无关。数据库架构如下here .

mysql> describe BTC_USDT_binance;
+--------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| date | timestamp(2) | YES | | NULL | |
| price | float | YES | | NULL | |
| volume | float | YES | | NULL | |
| bidAsk | bit(1) | YES | | NULL | |
| reset | bit(1) | YES | | NULL | |
+--------+---------------------+------+-----+---------+----------------+

黑客攻击

如果您限制提取的记录数(即一次只提取 100 条记录),问题就会消失。这种情况会持续到大约 1,000 条记录。这可以通过运行(改变 N 的值)很容易地看到/再现:

select * from BTC_USDT_binance where id >= 56057162 and id < 56057791 and bidAsk = 1 order by id asc limit N;

如果您只使用单边大于,并使用极限,问题也会消失。这见于:

select * from BTC_USDT_binance where id >= 56057162 and bidAsk = 1 order by id asc limit 500;

其他细节和注意事项

这是在 amazon RDS 的 mysql 上。引擎:MySQL 5.6.37数据库实例类:db.t2.medium

帮助

如果您直接给我发消息或在下面发帖,我可以提供对数据库的访问权限,让您尝试使用数据集。

最佳答案

我能看到同一查询返回两个不同结果集的唯一方法是,如果基础数据以某种方式被更改。明显的原因可能是当您两次运行相同的查询时是否在两者之间添加/删除了数据。

但是,对于 AWS,还有另一种解释。如果您的数据库实例是跨 RDS 逻辑复制的,那么第一个查询可能会在新添加/删除的数据跨 RDS 复制之前命中数据库。也就是说,您的查询实际上可能是针对稍微过时的数据库执行的。

关于python - 完全相同的 MYSQL 查询,一致地返回两个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com