SQL 添加外键到现有列

27 浏览
0 Comments

SQL 添加外键到现有列

如果我在SQL Server 2008中使用以下SQL命令来更新一个带有外键约束的表:

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)
REFERENCES ActiveDirectories(id)

其中UserID是我在Employees表中的外键列。我尝试引用ActiveDirectories表中的UserID。我收到以下错误信息:

外键 'UserID' 引用了在引用表 'Employees' 中无效的列 'UserID'。

0
0 Comments

在这个问题中,出现的原因是在SQL语句中添加外键时,可能会出现列名混淆的情况。解决方法是确保正确指定需要添加外键的表和列名。

可能是列名搞错了:

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)           <-- 这需要是Employees表中的一个列名
REFERENCES ActiveDirectories(id)   <-- 这需要是ActiveDirectories表中的一个列名

可能是Employees表中的列名叫做ID,而ActiveDirectories表中的列名叫做UserID:

ALTER TABLE Employees
ADD FOREIGN KEY (ID)                   <-- Employees表中的列名
REFERENCES ActiveDirectories(UserID)   <-- ActiveDirectories表中的列名

我知道这很奇怪,但不幸的是在ActiveDirectory表中的列名是id。

0
0 Comments

在这个问题中,出现错误是因为在Employees表中没有UserID列。解决方法是先添加列,然后重新运行语句。

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
REFERENCES ActiveDirectories(id);

这是正确的。我们的数据库没有更新添加的列。这个问题已经解决,但是我们的列已经建立,我仍然不能添加约束。错误信息显示“在引用的表'ActiveDirectories'中,没有与外键“FK__Employees__UserI__04E4BC85”中的引用列列表匹配的主键或候选键。”

看起来,由FK__Employees__UserI__04E4BC85引用的列在ActiveDirectories表中没有定义为主键或候选键。

是的,但它绝对是ActiveDirectories表中的主键。

解决方法:在构建之前创建ERD并建立关系是有原因的。我们的一张表中有太多记录,这导致在创建与另一张表的关系时出错。谢谢大家。

参考链接:stackoverflow.com/questions/35196951/…

谢谢,这个方法有效。给未来的读者一个注意:请确保两个表的外键值匹配,否则会出现警告。

您可以添加ON DELETE CASCADE ON UPDATE CASCADE

0
0 Comments

在MySQL / SQL Server / Oracle / MS Access数据库中,如果要向现有列添加外键,可以使用以下SQL语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

如果想要为外键约束命名,或者在多列上定义外键约束,可以使用以下SQL语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

以上是添加外键的常用语法。

0