在SQLite中,UNIQUE
约束NULL
是不同的(source)。在我的用例中,我希望NULL
对于特定的UNIQUE
约束是模糊的。下面的示例显示了我想要的内容。
sqlite> CREATE TABLE Foo (Name TEXT NOT NULL, Nullable TEXT, UNIQUE(Name, Nullable));
sqlite> INSERT INTO Foo(Name, Nullable) VALUES('foo', 'bar');
sqlite> INSERT INTO Foo(Name, Nullable) VALUES('foo', 'bar'); -- Errors as expected
Runtime error: UNIQUE constraint failed: Foo.Name, Foo.Nullable (19)
sqlite> INSERT INTO Foo(Name) VALUES('baz');
sqlite> INSERT INTO Foo(Name) VALUES('baz'); -- I want this to error, but it doesn't
似乎PostgreSQL在NULLS NOT DISTINCT
中支持这一点,但这种语法在SQLite中不起作用。所以,我想知道如何才能在SQLite中获得这种行为。
1条答案
按热度按时间mgdq6dx11#
您需要将
NULL
值转换为某个值,才能使其计入唯一索引。通过以下方式创建您的唯一索引:
当然,从唯一性的Angular 来看,这有一个限制,即空字符串和NULL将被视为相同的值。如果这不限制您,您可以选择此设计。
否则,您需要重新设计表,以便在没有
NULL
值的列上使用唯一索引。