2012-08-29 102 views
1

有一个MySQL表,我认为唯一索引损坏。 当我执行后续SQL:索引mysql损坏?

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 +行。

+1

'filed_b'或'field_b'? – hjpotter92

+0

field_b对不起..大声笑 – Fabio

+0

你是什么意思的'响应是NULL'?你的结果集中是否有零行,或者这是什么由一些SQL包装方法返回? – raina77ow

回答

0

尝试的filed_b代替field_b

SELECT filed_b From table limit 0,10 //spelling mistake 
0

您可以用唯一索引的列有重复的NULL值。唯一索引只保证非空值是唯一的。

documentation所述,BDB存储引擎存在例外。

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

您至少有10行where field_b为NULL,并且他们在您发出查询时显示。

要查看所有行的其中field_b为NULL试试这个:

SELECT * FROM table WHERE field_b IS NULL