sql 允许重复空值的唯一索引
sql unique index allowing duplicate nulls
我有一个 table 和奖品代码
codes
code, user_id, prize_id
我在 user_id、prize_id
上有一个唯一索引
所有代码都已在 table 中,当用户兑换代码时,会分配一个 user_id = NULL 的随机代码。
不幸的是,这不起作用,因为唯一索引不允许我在不分配 user_id 的情况下多次添加相同的 prize_id。
有没有什么方法可以告诉唯一索引 NULL 不应该被认为是重复的?
初始状态:
code, user_id, prize_id
A, NULL, 1
B, NULL, 1
C, NULL, 1
D, NULL, 2
E, NULL, 2
用户1兑换奖品2的代码后:
code, user_id, prize_id
A, NULL, 1
B, NULL, 1
C, NULL, 1
D, 1, 2
E, NULL, 2
只需使用过滤索引:
create unique index unq_codes_user_prize on codes(user_id, prize_id)
where user_id is not null;
我有一个 table 和奖品代码
codes
code, user_id, prize_id
我在 user_id、prize_id
上有一个唯一索引所有代码都已在 table 中,当用户兑换代码时,会分配一个 user_id = NULL 的随机代码。
不幸的是,这不起作用,因为唯一索引不允许我在不分配 user_id 的情况下多次添加相同的 prize_id。
有没有什么方法可以告诉唯一索引 NULL 不应该被认为是重复的?
初始状态:
code, user_id, prize_id
A, NULL, 1
B, NULL, 1
C, NULL, 1
D, NULL, 2
E, NULL, 2
用户1兑换奖品2的代码后:
code, user_id, prize_id
A, NULL, 1
B, NULL, 1
C, NULL, 1
D, 1, 2
E, NULL, 2
只需使用过滤索引:
create unique index unq_codes_user_prize on codes(user_id, prize_id)
where user_id is not null;