mysql - 虽然 col1 和 col2 以及索引,但重复的条目如何仍然从我的表中弹出?
问题描述
我正在使用一个可以看到 3 列的表。
INVERTER_ID
,TIME_STAMP
和POWER
INVERTER_ID
并且TIME_STAMP
是索引。
这是一张巨大的桌子。我的一个代码抛出了一个错误,因为遇到了重复的条目。
我得到了我有重复条目的时间戳和inverter_id。'2019-05-04 21:00:00' 和INV1020
我用以下方式查询了表格:
SELECT `INVERTER_ID`,`TIME_STAMP`,`POWER`
FROM `INV_POWER`
WHERE `TIME_STAMP`='2019-05-04 21:00:00' and
`INVERTER_ID` ='INV1020'
只得到一个结果。
INV1020 2019-05-04 21:00:00 0.0
我想很奇怪,所以我去检查了我的代码正在使用的 sql 查询并使用相同的查询:
SELECT `INVERTER_ID`,`TIME_STAMP`,`POWER
FROM `INV_POWER`
WHERE `TIME_STAMP`<='2019-05-04 21:00:01' and
`TIME_STAMP`>='2019-05-04 21:00:00' and
`INVERTER_ID` ='INV1020'
在这种情况下,我得到了两个结果:
INV1020 2019-05-04 21:00:00 0.0
INV1020 2019-05-04 21:00:00 0.0
好奇这是如何以及为什么会发生的。当我有INVERTER_ID
和TIME_STAMP
作为索引时,我检查了表的结构,发现它
AUTO_INDEX
是primary_key和一个索引。所以我再次查询,但这次AUTO_INDEX
在我的选择中使用 , 列。
SELECT `AUTO_INDEX`, `INVERTER_ID`,`TIME_STAMP`,`POWER` FROM `INV_POWER` WHERE `TIME_STAMP`<='2019-05-04 21:00:01' and `TIME_STAMP`>='2019-05-04 21:00:00' and`INVERTER_ID` ='INV1020'
6081057323 INV1020 2019-05-04 21:00:00 0.0
25805384826 INV1020 2019-05-04 21:00:00 0.0
------------------------------------------------------------------
问:为什么会这样?有了索引集,它是如何被插入的呢?为什么我在使用<
and时会看到重复项>
;而不是当我使用=
.
先感谢您 :)
解决方案
我怀疑TIME_STAMP
列的数据类型允许小数秒,例如,数据类型可以是DATETIME(3)
. (我们只是在这里猜测。)
https://dev.mysql.com/doc/refman/8.0/en/datetime.html
这将解释观察到的行为。
推荐阅读
- javascript - 从 ArcGIS Archade 脚本进行 API 调用
- azure-ad-b2c - 在 SubJourney 中执行时来自 SAML TechnicalProfile 的错误“80131515:Web.TPEngine.Providers.RestfulProvider 不支持 ValidateAsync”
- json - 使用 docker 内的 JQ 在 JSON 中映射环境变量
- apache-spark - 考拉中不同类型的默认索引选择
- c# - 死锁可能是由实体框架的页面锁引起的
- flutter - 使用 Hydrated Bloc 版本 5 及更高版本的持久状态
- .htaccess - .htaccess P flag gets redirected
- java - 如何在 Java 中正确执行线程回调?
- javascript - 如何使用 javascript 中的 split 函数拆分值以拆分仅检查第一次和最后一次出现
- javascript - 无法在反应原生 ios 中关闭单个视图