首頁 > 資料庫 > mysql教程 > 如何對資料庫表中的可空列實施唯一約束?

如何對資料庫表中的可空列實施唯一約束?

Barbara Streisand
發布: 2025-01-20 23:56:13
原創
245 人瀏覽過

How to Enforce Unique Constraints with Nullable Columns in a Database Table?

在包含可空列的表中強制唯一約束

本文討論了在包含可空列的表上建立唯一約束的挑戰。目標是防止出現多行具有相同值組合的情況,即使可空列為 null。

問題:

提供的表模式具有一個可以為 null 的 UserRepository 欄位。但是,使用者希望確保對於每對 UserId 和 RecipeId,只有一行存在,而不管 MenuId 值如何。

答案:

PostgreSQL 15 或更高版本:

  • 在 UNIQUE 限制定義中使用 NULLS NOT DISTINCT 子句。
ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE NULLS NOT DISTINCT (UserId, MenuId, RecipeId);
登入後複製

PostgreSQL 14 或更低版本:

  • 建立兩個部分索引:
CREATE UNIQUE INDEX favo_3col_uni_idx ON Favorites (UserId, MenuId, RecipeId)
WHERE MenuId IS NOT NULL;

CREATE UNIQUE INDEX favo_2col_uni_idx ON Favorites (UserId, RecipeId)
WHERE MenuId IS NULL;
登入後複製

優點:

  • 有效地強制執行所需的約束。

缺點(僅限部分索引):

  • 限制外鍵引用和聚類選項。
  • 在某些查詢中,如果沒有符合的 WHERE 條件,則無法使用。

替代方案:

  • 如果涉及多個可空列,請參考本文中的討論:「為什麼我的 UNIQUE 約束沒有觸發?」。

以上是如何對資料庫表中的可空列實施唯一約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板