【问题标题】:sql unique index allowing duplicate nulls [duplicate]sql唯一索引允许重复的空值[重复]
【发布时间】:2017-12-28 19:38:00
【问题描述】:

我有一张带有奖品代码的桌子

codes
code, user_id, prize_id

我有一个关于 user_id,prize_id 的唯一索引

所有代码都已在表中,当用户兑换代码时,会分配一个 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

【问题讨论】:

  • NULL 不是一个值,它是没有一个值。或许可以默认设置一个名为“No Prize”的ID。
  • @JacobH 那我还是有这个会和唯一索引冲突的问题
  • 删除 user_id 上的唯一索引,如果它在您的数据模型中是可为空的列

标签: sql sql-server unique-index


【解决方案1】:

只需使用过滤索引:

create unique index unq_codes_user_prize on codes(user_id, prize_id) 
    where user_id is not null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多