sách gpt4 ai đã đi

每个用户最多两个条目的 SQL 唯一约束

In lại 作者:行者123 更新时间:2023-12-02 16:39:43 29 4
mua khóa gpt4 Nike

是否可以在 SQL 中生成一个唯一约束,允许单个用户 (user_id) 最多启用两个条目 (đã bật)?例子如下

user_id | enabled
------------------
123 | true
123 | true
123 | false
456 | true

以上是有效的,但添加另一个 user_id = 123enabled = true 会失败,因为会有三个条目。另外添加 user_id = 123enabled = false 将是有效的,因为该表仍然满足规则。

1 Câu trả lời

您可以通过将另一个 Boolean 列添加到 UNIQUE hoặc PRIMARY KEY 约束(或 UNIQUE 指数):

CREATE TABLE tbl (
user_id int
, enabled bool
, enabled_first bool DEFAULT true
, PRIMARY KEY (user_id, enabled, enabled_first)
);

enabled_firstĐÚNG VẬY 标记每个实例的第一个。我将其设置为 DEFAULT true 以允许对每个 user_id 的第一个 đã bật 进行简单插入 - 没有提及添加的 enabled_first。需要显式 enabled_first = false 才能插入第二个实例。

VÔ GIÁ TRỊ giá trị 被我使用的 PK 约束自动排除。请注意,一个简单的 UNIQUE 约束仍然允许 VÔ GIÁ TRỊ 值,绕过您想要的约束。您必须另外定义所有三列 NOT NULL。见:

db<> fiddle đây

当然,现在这两个ĐÚNG VẬY/SAI值在内部是不一样的,需要调整写操作。这可能会或可能不会被接受。甚至可能是可取的。

受欢迎的副作用:由于最小有效负载(实际数据大小)是每个索引元组 8 个字节,而 bool 值占用 1 个字节而不需要对齐填充,索引仍然与 (user_id) 的最小大小相同, 已启用).
表类似:添加的Boolean 不会增加物理存储。 (可能不适用于具有更多列的表格。)参见:

关于每个用户最多两个条目的 SQL 唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61945825/

29 4 0
Bài viết được đề xuất: database - Cassandra 遵循哪种分区技术?
Bài viết được đề xuất: javascript - for 循环内部 "in"运算符的大 O
Bài viết được đề xuất: Kubernetes 部署 - 传递参数
Bài viết được đề xuất: javascript - 向 https ://newsapi. 组织发出请求时,CORS 策略出现问题
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com