370

ユニークにしたいメール列があります。しかし、null 値を受け入れることも必要です。私のデータベースはそのように2つのヌルメールを持つことができますか?

4

5 に答える 5

535

はい、MySQL では、一意の制約を持つ列で複数の NULL を使用できます。

CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1);   -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;

結果:

x
NULL
NULL
1

これは、すべてのデータベースに当てはまるわけではありません。たとえば、SQL Server 2005 以前では、一意の制約を持つ列で単一の NULL 値のみが許可されます。

于 2010-09-14T19:34:01.237 に答える
135

ドキュメントから:

「UNIQUE インデックスは、NULL を含むことができる列に複数の NULL 値を許可します」

これは、 BDBを除くすべてのエンジンに適用されます。

于 2010-09-14T19:33:36.523 に答える
15

著者が元々、これが値の重複を許可するかどうかを尋ねていたのか、それとも「NULL使用中に値の重複を許可するにはどうすればよいUNIQUEですか?」という暗黙の質問があったのかどうかはわかりません。または「値を 1 つだけ許可する方法はUNIQUE NULL?」

質問はすでに回答されています。はい、インデックスNULLの使用中に値が重複する可能性があります。UNIQUE

UNIQUE NULL「1つの値を許可する方法」を検索しているときに、この答えに出くわしたので。同じことをしているときにこの質問に出くわす可能性のある他の人にとって、私の答えの残りはあなたのためです...

MySQL ではUNIQUE NULL値を 1 つ持つことはできませんがUNIQUE、空の文字列の値を挿入することで空の値を 1 つ持つことができます。

警告: 数値および文字列以外の型は、デフォルトで 0 または別のデフォルト値になる場合があります。

于 2016-11-23T14:38:15.770 に答える
7

null 許容の一意の制約は避けてください。いつでも列を新しいテーブルに配置し、null 以外で一意にしてから、値がある場合にのみそのテーブルにデータを入力できます。これにより、列に対するキーの依存関係が正しく実施され、NULL が原因で発生する可能性のある問題が回避されます。

于 2010-09-14T19:46:36.793 に答える