有一个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 +行。
答案 0 :(得分:0)
尝试使用filed_b
代替field_b
SELECT filed_b From table limit 0,10 //spelling mistake
答案 1 :(得分:0)
您可以在具有唯一索引的列中包含重复的NULL值。唯一索引仅保证非空值是唯一的。
正如documentation所述,BDB存储引擎存在异常。
UNIQUE索引创建一个约束,以便索引中的所有值 必须是截然不同的如果您尝试使用a添加新行,则会发生错误 与现有行匹配的键值。此约束不适用 除了BDB存储引擎之外的NULL值。
至少有十行,其中field_b为NULL,并且在您发出查询时它们会显示。
要查看field_b为NULL的所有行,请尝试:
SELECT * FROM table WHERE field_b IS NULL