具有空值作为有效行的唯一约束
Unique constraints with null values as valid row
您好,我正在批处理中插入一堆数据。
最终输出应该是这样的 table。观察这里 Name, Address_id
对是唯一的。 Address_id
可以为 NULL 但对于给定的对 Name, Address_id
只能为一次
Name address_id
——— —————
“Richard” 1
“Richard” 2
“Richard” NULL
“Richard 3
“James” 1
“James” 2
“James” NULL
“James” 3
然而,当address_id
为NULL时,我不能保证这对的唯一性。如果我添加 INDEX UNIQUE (name, address_id)
,另一对 (“Richard”, NULL)
将被视为有效
然后,如果我添加以下索引(谷歌搜索发现)
CREATE UNIQUE INDEX index_employers_on_name_and_address_id
ON employers(name, address_id)
WHERE address_id IS NOT NULL
CREATE UNIQUE INDEX index_employers_on_name
ON employers(name)
WHERE address_id IS NULL
不允许所有 (<NAME>, NULL)
对,因为已经存在唯一的 NAME
一些想法?
这个索引:
CREATE UNIQUE INDEX index_employers_on_name
ON employers(name)
WHERE address_id IS NULL ;
是一个部分索引,仅在address_id is null
时适用。每个 name
只允许一个 NULL
值。 address_id
的非 NULL
值对唯一性没有影响。
这似乎符合您的要求。
您好,我正在批处理中插入一堆数据。
最终输出应该是这样的 table。观察这里 Name, Address_id
对是唯一的。 Address_id
可以为 NULL 但对于给定的对 Name, Address_id
Name address_id
——— —————
“Richard” 1
“Richard” 2
“Richard” NULL
“Richard 3
“James” 1
“James” 2
“James” NULL
“James” 3
然而,当address_id
为NULL时,我不能保证这对的唯一性。如果我添加 INDEX UNIQUE (name, address_id)
(“Richard”, NULL)
将被视为有效
然后,如果我添加以下索引(谷歌搜索发现)
CREATE UNIQUE INDEX index_employers_on_name_and_address_id
ON employers(name, address_id)
WHERE address_id IS NOT NULL
CREATE UNIQUE INDEX index_employers_on_name
ON employers(name)
WHERE address_id IS NULL
不允许所有 (<NAME>, NULL)
对,因为已经存在唯一的 NAME
一些想法?
这个索引:
CREATE UNIQUE INDEX index_employers_on_name
ON employers(name)
WHERE address_id IS NULL ;
是一个部分索引,仅在address_id is null
时适用。每个 name
只允许一个 NULL
值。 address_id
的非 NULL
值对唯一性没有影响。
这似乎符合您的要求。