有一个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+行。
发布于 2012-08-29 20:49:03
尝试filed_b而不是field_b
SELECT filed_b From table limit 0,10 //spelling mistake发布于 2012-08-29 21:09:47
在具有唯一索引的列中可以有重复的空值。唯一索引只保证非空值是唯一的。
正如documentation所指出的,BDB存储引擎有一个例外。
唯一索引创建了一个约束,使得索引中的所有值都必须是不同的。如果尝试添加键值与现有行匹配的新行,则会发生错误。此约束不适用于空值,但BDB存储引擎除外。
至少有10行field_b为NULL,并且在发出查询时会显示这些行。
要查看field_b为NULL的所有行,请尝试以下命令:
SELECT * FROM table WHERE field_b IS NULLhttps://stackoverflow.com/questions/12178208
复制相似问题