首页 > 解决方案 > 虽然 col1 和 col2 以及索引,但重复的条目如何仍然从我的表中弹出?

问题描述

我正在使用一个可以看到 3 列的表。 INVERTER_ID,TIME_STAMPPOWER

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_IDTIME_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时会看到重复项>;而不是当我使用=.

先感谢您 :)

标签: mysqlsql

解决方案


我怀疑TIME_STAMP列的数据类型允许小数秒,例如,数据类型可以是DATETIME(3). (我们只是在这里猜测。)

https://dev.mysql.com/doc/refman/8.0/en/datetime.html

这将解释观察到的行为。


推荐阅读