在access中如何创建外键?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在access中如何创建外键?相关的知识,希望对你有一定的参考价值。

参考技术A

1、首先打开要建外键表的设计器,右击选择“关系”。

2、然后弹出“外键关系”窗体,点击选择“添加”,

3、然后点击“表和列规范”后面的小按钮,

4、就会弹出另外一个窗体让我们选择主键表和列,选好之后点击确定。

5、然后展开Insert和Update规范,在更新规则和删除规则有四个选项,分别是“不执行任何操作”、“级联”、“设置为NULL”、“设置默认值”就可以了。

如果表中已有记录,如何创建外键?

【中文标题】如果表中已有记录,如何创建外键?【英文标题】:How to create foreign key if records are already available in table? 【发布时间】:2017-04-20 20:46:30 【问题描述】: 我正在使用 phpMyAdmin 我创建了 2 个表,Table1 和 Table2。 在 Table1 (id) 中是主键,我忘了创建外键 键入 Table2 并添加 table2 上的所有记录。

问题:

如果表2中没有记录,那么我可以创建一个外键,但是如果有记录,我们如何创建外键。

我必须在 Table2 中创建外键。我试过下面的查询

ALTER TABLE Table2 
ADD CONSTRAINT FK_User_id
FOREIGN KEY(User_id) REFERENCES Table1(Id)

我在 phpMyadmin 中遇到错误

1452 - 无法添加或更新子行:外键约束失败

【问题讨论】:

请查看我的更新答案,其中突出显示了标记答案的一些潜在问题。 【参考方案1】:

您的错误表明它无法创建外键,因为它无法映射某些值。所以在执行此操作之前,请确保 Table2 中所有引用的数据都存在于 Table1 的主键中。

从每个表中查询不同的值,看看有什么区别,并在尝试重新运行更改脚本之前修复数据。

评论后更新:

在 Table2 中,我创建了 User_id 列,它的默认值为 0

针对您的上述评论,您应该使用NULL 作为默认值而不是0,它应该可以工作。您需要像这样运行更新脚本来将0 值更改为NULL

UPDATE Table2
SET User_Id = NULL 
WHERE User_Id = 0

标记的答案是建议删除不引用表 1 中记录的数据,但这可能很危险,因为表 2 中的记录在不加入表 1 时可能有效。

例如,假设 Table1 是 CarBuyer,Table2 是 CarsForSaleCarsForSale有一个买车人的栏目,只有买车的时候才会填,否则应该是NULL。对于另一个答案,建议是删除所有没有买家的汽车。

【讨论】:

在 Table2 中,我创建了 User_id 列,它的默认值为 0。【参考方案2】:

第一步,

ALTER TABLE Table2 
ADD User_id1 int

第二步,

ALTER TABLE Table2 
ADD CONSTRAINT FK_User_id1
FOREIGN KEY(User_id1) REFERENCES Table1(Id)

第三步,

update Table2 set User_id1 =User_id

查看第 3 步错误是有效的。因为之前没有 FK,所以插入了一些无效数据。

你可以运行这个查询,

select [user_id] from table2 A
where not exists(select id from table1 B where b.[user_id]=a.id)

--你会在这里得到一些记录 --当你删除这些记录时 -- 那么第三步就可以正常运行了。你决定

如果它仍处于开发阶段,那么您可以删除这些记录。 或

遗憾的是你现在不能创建 FK。你仍然可以在 table2 上创建而不是触发器

性能方面两者相同。

【讨论】:

您的错误表明您没有运行我的脚本。看到我创建了新列,然后添加了新的约束名称 FK_User_id1 KumarHarsh 先生,我在第三步中遇到错误。无法添加或更新子行:外键约束失败 Right KumarHarsh,我又试了一次,但在第三步遇到问题。 KumarHarsh 先生,我有一个疑问。我可以删除我之前创建的列名 User_id,因为它没有用处。 因为使用你查询创建了User_id1,也就是外键

以上是关于在access中如何创建外键?的主要内容,如果未能解决你的问题,请参考以下文章

如何在从 Excel 导入的表中的 Access 中分配外键

如何在 Access 中实现自反主键/外键关系?

在 ms-access 中获取表的外键约束列表?

MS Access:从没有外键的 2 个表中选择记录

Access vba:如何在两个相关表中执行插入?

在新建数据库(Access)中,如何设置主键?