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
表中的列名为ID
,ActiveDirectories
表中的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 数据库项目中的数据将外键约束添加到现有表