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

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

Barbara Streisand
发布: 2025-01-15 09:32:46
原创
537 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板