3

sqliteでいずれかがnullになる可能性がある場合、複数の列に一意の制約を設定するにはどうすればよいですか?

たとえば、unique("col1","col2","col3") を作成し、insert into tablename values("abc","def",null)2 回試してみると、両方の行が挿入されました。3 番目の列が null の場合、一意の制約は機能しません。

4

3 に答える 3

5

sqlite では、すべての null が違いです。この問題を解決する最善の方法は、列 c を特別なデフォルト値で null 以外に設定することだと思います。次に、デフォルト値 (0、'' など) を使用して null を表します。

編集 1

このソリューションを任意の列に簡単に拡張できます

create table test (
    a text not null default "",
    b text not null default "",
    c text not null default ""
);
于 2012-08-23T15:28:33.060 に答える
1

バージョン 3.9.0 (2015-10-14) 以降では、式 ( https://www.sqlite.org/expridx.html ) でインデックスを使用し、たとえばCOALESCE関数を使用してnull値を何らかの形式のフォールバック値に変換できます。

CREATE UNIQUE INDEX IX_Unique ON Table1 (
    COALESCE(col1, ""), 
    COALESCE(col2, ""), 
    COALESCE(col3, "")
);
于 2016-11-28T13:21:18.630 に答える