搜索
MySQL仅当另一列为空时才约束唯一索引
P粉930448030
P粉930448030 2024-01-16 15:42:42
[MySQL讨论组]

我正在尝试重写 Postgres 架构以适应 MySQL (8.0.32) 方言。如您所知,MySQL 不支持部分索引。

在以下情况下,仅当 deleted_at 为 null 时,才会存在一个索引,该索引会强制执行 customer_group.name 上的唯一数据。

这是有道理的,因为确保删除的条目是唯一的是没有意义的。但是,我不明白如何在没有部分索引的情况下实现相同的约束。

CREATE TABLE
  "customer_group" (
    "id" integer NOT NULL AUTO_INCREMENT,
    "created_at" datetime NOT NULL DEFAULT NOW(),
    "updated_at" datetime NOT NULL DEFAULT NOW(),
    "deleted_at" datetime,
    "name" text NOT NULL,
    "metadata" text,
    CONSTRAINT "PK_142c3338-da81-4d0c-8cd8-490bb41cd187" PRIMARY KEY ("id")
  );

-- solve this
-- ensure name is unique when one customer_group is not deleted
CREATE UNIQUE INDEX "IDX_d12ecf48-302c-4292-8c8d-d2cc7c8149f9" ON "customer_group" ("name")
WHERE
  "deleted_at" IS NULL;

附注我确实在使用 ANSI_QUOTES

有人建议我尝试使用 2 列而不是一列的唯一索引。但是,如果约束是 UNIQUE INDEX "IDX_d12ecf48-302c-4292-8c8d-d2cc7c8149f9" ON "customer_group" ("name", "deleted_at") 那么我会得到与我想要的相反的结果: deleted_at 为 NULL,则 name 可以重复。

P粉930448030
P粉930448030

全部回复(2)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板