1

有一个 mysql 表,我认为唯一索引已损坏。当我执行以下 sql 时:

SELECT field_b FROM table LIMIT 0,10 

响应为 NULL(10 行为 NULL)。

但是如果我执行

SELECT field_b FROM table WHERE field_a = 1

我正在获取(非空)数据。发生了什么?

以下是表格属性

field_a and field_b = INT(11)
field_a = PRIMARY
field_b = UNIQUE INDEX
Table type = INNODB

此表中有 200k+ 行。

4

2 回答 2

0

尝试filed_b代替field_b

SELECT filed_b From table limit 0,10 //spelling mistake
于 2012-08-29T12:49:02.813 回答
0

您可以在具有唯一索引的列中具有重复的 NULL 值。唯一索引仅保证非空值是唯一的。

文档所述,BDB 存储引擎有一个例外。

UNIQUE 索引创建一个约束,使得索引中的所有值都必须是不同的。如果您尝试使用与现有行匹配的键值添加新行,则会发生错误。此约束不适用于 NULL 值,但 BDB 存储引擎除外。

您至少有十行 field_b 为 NULL 并且在您发出查询时它们会显示。

要查看 field_b 为 NULL 的所有行,请尝试以下操作:

SELECT * FROM table WHERE field_b IS NULL
于 2012-08-29T13:09:46.683 回答