SQL将外键添加到现有列

Posted

技术标签:

【中文标题】SQL将外键添加到现有列【英文标题】:SQL Add foreign key to existing column 【发布时间】:2012-05-10 11:52:21 【问题描述】:

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

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

UserID 是我在 Employees 表中的 FK 列。我试图在我的ActiveDirectories 表中引用 UserID。我收到此错误:

外键 'UserID' 在引用中引用了无效列 'UserID' 表“员工”。

【问题讨论】:

你能提供你的两个表的架构吗? 参考此链接***.com/questions/35196951/… 【参考方案1】:

如果表已经创建:

先做:

ALTER TABLE `table1_name` ADD UNIQUE( `column_name`);

然后:

ALTER TABLE `table1_name` ADD FOREIGN KEY (`column_name`) REFERENCES `table2_name`(`column_name`);

【讨论】:

【参考方案2】:

未来。

ALTER TABLE Employees
ADD UserID int;

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

【讨论】:

【参考方案3】:
ALTER TABLE Faculty 
WITH CHECK ADD  CONSTRAINT FKFacultyBook
FOREIGN KEY FacId
REFERENCES Book Book_Id

ALTER TABLE Faculty 
WITH CHECK ADD  CONSTRAINT FKFacultyStudent 
FOREIGN KEY FacId
REFERENCES Student StuId

【讨论】:

您应该在回答中提供一些解释【参考方案4】:

ActiveDirectories(id) 的外键创建方式正确,我认为主要错误是您没有在 ActiveDirectories 表中提到 id 的主键

【讨论】:

【参考方案5】:

mysql / SQL Server / Oracle / MS Access:

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

要允许命名 FOREIGN KEY 约束并在多列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

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

【讨论】:

【参考方案6】:

也许你的列倒了??

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)           <-- this needs to be a column of the Employees table
REFERENCES ActiveDirectories(id)   <-- this needs to be a column of the ActiveDirectories table

会不会是Employees表中的列名为IDActiveDirectories表中的UserID

那么你的命令应该是:

ALTER TABLE Employees
ADD FOREIGN KEY (ID)                   <-- column in table "Employees"
REFERENCES ActiveDirectories(UserID)   <-- column in table "ActiveDirectories" 

【讨论】:

我知道这很奇怪,但不幸的是 ActiveDirectory 表 id 中的名称【参考方案7】:

错误表明您的员工表中没有 UserID 列。尝试先添加列,然后重新运行语句。

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

【讨论】:

这是正确的。我们的数据库没有更新我们的添加列。这已经解决了,但我们的列没有建立我仍然无法添加约束。 There are no primary or candidate keys in the referenced table 'ActiveDirectories' that match the referencing column list in the foreign key 'FK__Employees__UserI__04E4BC85'. 看起来 FK__Employees__UserI__04E4BC85 引用的任何列都没有定义为 ActiveDirectories 表中的 PRIMARY KEY 或候选键。 是的,但这绝对是我们在 ActiveDirectories 表中的 PK 已解决:在构建之前创建 ERD 并建立关系是有原因的。我们在一个表中有太多记录,导致尝试创建与另一个表的关系时出错。谢谢大家。 参考此链接***.com/questions/35196951/…

以上是关于SQL将外键添加到现有列的主要内容,如果未能解决你的问题,请参考以下文章

如何将外键添加到现有表?

使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表

使用 Visual Studio 数据库项目中的数据将外键约束添加到现有表

使用 annotate 或 extra 将外键字段添加到查询集? (相当于 SQL“AS”?)

将外键添加到用户表时 Laravel 7 错误

将外键添加到迁移(Laravel)