首頁 > 資料庫 > mysql教程 > 如何建立引用非主鍵列的外鍵約束?

如何建立引用非主鍵列的外鍵約束?

Barbara Streisand
發布: 2025-01-15 09:32:46
原創
599 人瀏覽過

How to Create a Foreign Key Constraint Referencing a Non-Primary Key Column?

外鍵約束引用非主鍵

透過外鍵連結表時維護引用完整性是一個常見需求。但是,當外鍵引用的表沒有與被引用列對應的主鍵時,就會發生這種情況。

問題描述:

考慮以下資料庫模式:

CREATE TABLE table1
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   SomeData VARCHAR(100) NOT NULL
);

CREATE TABLE table2
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   MoreData VARCHAR(30) NOT NULL,

   CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID)
);
登入後複製

這裡的目標是在 table2.AnotherID 和 table1.AnotherID 之間強制執行外鍵約束。但是,ID 是 table1 的主鍵,而 AnotherID 不是主鍵。

解:

要建立引用非主鍵的外鍵約束,被引用列必須套用唯一約束。根據 Microsoft 的 Books Online:

「FOREIGN KEY 限制不必只連結到另一個表中的 PRIMARY KEY 限制;它也可以定義為引用另一個表中 UNIQUE 約束的欄位。」

因此,在給定的模式中,將唯一約束應用於 table1 中的 AnotherID 將允許建立外鍵約束。

ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);
登入後複製

但是,需要注意的是,如果存在備選主鍵候選,則使用它通常是更合適的方法。

以上是如何建立引用非主鍵列的外鍵約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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