首页 >数据库 >mysql教程 >如何创建引用非主键列的外键约束?

如何创建引用非主键列的外键约束?

Barbara Streisand
Barbara Streisand原创
2025-01-15 09:32:46584浏览

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

外键约束中引用非主键

通过外键链接表时维护引用完整性是一个常见需求。但是,当外键引用的表没有与被引用列对应的主键时,就会出现这种情况。

问题描述:

考虑以下数据库模式:

<code class="language-sql">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)
);</code>

这里的目标是在 table2.AnotherID 和 table1.AnotherID 之间强制执行外键约束。但是,ID 是 table1 的主键,而 AnotherID 不是主键。

解决方案:

要创建引用非主键的外键约束,被引用列必须应用唯一约束。根据 Microsoft 的 Books Online:

“FOREIGN KEY 约束不必只链接到另一个表中的 PRIMARY KEY 约束;它也可以定义为引用另一个表中 UNIQUE 约束的列。”

因此,在给定的模式中,将唯一约束应用于 table1 中的 AnotherID 将允许创建外键约束。

<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>

但是,需要注意的是,如果存在备选主键候选,则使用它通常是更合适的方法。

以上是如何创建引用非主键列的外键约束?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn