回答:
はい。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値のみが許可されています。
WHERE column IS NOT NULL
私のバージョンのMySQLではサポートされていないため、失敗するようにも見えません。誰もが私がどこを見られるか知っていますか?
著者がもともとこれが重複値を許可するかどうかを尋ねていたのか、またはここで「NULL
使用中に重複値を許可するにはどうすればよいUNIQUE
ですか?」または「1つのUNIQUE
NULL
値のみを許可する方法」
質問はすでに回答されています。はいNULL
、UNIQUE
インデックスを使用しているときに値が重複する可能性があります。
「1つのUNIQUE
NULL
値を許可する方法」を検索しているときに、この答えを見つけました。同じことをしながらこの質問に遭遇する可能性のある他の誰にとっても、私の答えの残りはあなたのためです...
MySQL UNIQUE
NULL
では1つの値を持つことはできませんがUNIQUE
、空の文字列の値を挿入することにより、1つの空の値を持つことができます。
警告:文字列以外の数値と型は、デフォルトで0または別のデフォルト値になる場合があります。
UNIQUE
制約のためではなく、制約のために失敗するということですNOT NULL
。質問は特にUNIQUE
拘束の振る舞いに関するものであるため、この回答は質問には無関係であると思います。
null可能な一意制約は避けてください。いつでも列を新しいテーブルに配置し、それを非nullかつ一意にして、値がある場合にのみそのテーブルにデータを設定できます。これにより、列に対するキーの依存関係が正しく適用され、nullによって引き起こされる可能性のある問題が回避されます。