1

mysql テーブルがあり、一意のインデックスが壊れていると思います。次のSQLを実行すると:

SELECT field_b FROM table LIMIT 0,10 

応答は NULL (NULL を含む 10 行) です。

しかし、私が実行すると

SELECT field_b FROM table WHERE field_a = 1

(null 以外の) データを取得しています。何が起こっていますか?

テーブルのプロパティは次のとおりです。

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

このテーブルには 20 万以上の行があります。

4

2 に答える 2

0

一意のインデックスを持つ列には、重複する NULL 値を含めることができます。一意のインデックスは、null 以外の値が一意であることのみを保証します。

ドキュメントに記載されているように、BDB ストレージ エンジンには例外があります。

UNIQUE インデックスは、インデックス内のすべての値が個別でなければならないという制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。この制約は、BDB ストレージ エンジンを除き、NULL 値には適用されません。

field_b が NULL である行が少なくとも 10 行あり、クエリを発行するとそれらが表示されます。

field_b が NULL であるすべての行を表示するには、次のようにします。

SELECT * FROM table WHERE field_b IS NULL
于 2012-08-29T13:09:46.683 に答える
0

filed_b代わりに試してくださいfield_b

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