web-dev-qa-db-ja.com

MySQLで空の値を許可する一意の制約

製品コードを保存するフィールドがあります。コードは一意ですが、一部の製品にはコードがありません。コードはプロバイダーコードなので、発明することはできません。

MySQLでこの種の制約は可能ですか?

私はストアドプロシージャとトリガーを使用する初心者なので、ソリューションにこれらのいずれかが含まれる場合は、しばらくお待ちください。

更新:列はNULLではありません。それが私がこれを行うことができなかった理由です。

121

はい、これを行うことができます。 MySQLリファレンス(バージョン5.5) を参照してください。

UNIQUEインデックスは、インデックス内のすべての値が異なる必要があるような制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。すべてのエンジンで、UNIQUEインデックスはNULLを含むことができる列に複数のNULL値を許可します。

178
lutz

はい、商品コード列をNULL可能にした場合(NOT NULL)、一意のキーはNULL製品コードを持つ複数の行を許可します。

13
chaos

MySQLでは、一意の列に複数の行がNULLの値を持つことを引き続き許可しています。

8
cg.