2017-02-03 19 views
0

他们说外键是为了使两个表格之间的关系成为可能,但我可以在JOINs的语句中做到这一点。在SQL语句中,我无法用JOIN做一个前置关键字,我到底该怎么办?或者只是为了帮助我们处理数据库中的表的外键?如何处理SQL语句中不能JOIN的外键?

+0

你可以做任何最重要的事情,你可以申请constains ..在更新。删除..唯一等等,所以表格与规则相关......总是执行 – scaisEdge

+0

外键只是强制dba定义的关系,作为奖励你可以定义[参考动作](https:// en.wikipedia。org/wiki/Foreign_key#Referential_actions)来使管理相关表的方面健全。 – cteski

+0

什么是“帮助我们,而我们正在与表工作”是什么意思? – philipxy

回答

1

两个表的行之间的关系可以通过在每个表的列中存储“公共值”来建立。 (这是关系数据库理论的基本原则。)

A FOREIGN KEY完整性约束在数据库中。如果定义(和执行)外键约束,该数据库将被存储在一个行(由INSERTUPDATE声明禁止无效的值,并防止被删除(由DELETE语句行。)

一个JOIN在一个SQL语句中的操作只允许我们访问多个表,通常情况下,一个连接操作将包括需要一个表中的外键与另一个表的主键“匹配”的条件,但这不是必需的。 (CROSS JOIN

1

外键用于保护数据库的完整性。您可以在没有任何外键存在的情况下使用连接读取数据(并且我们始终都在这样做)。

外键的作用是通过执行像删除子记录所引用的父记录的方式来防止您的数据破坏您的数据。如果您尝试删除父记录而不先删除子项,则会出错,从而防止数据损坏。它也可以进行配置,以便在删除父项时自动删除子记录。

+0

+10好消除歧义FOREIGN KEY约束 – spencer7593

0

我们不使用FKs(外键)来查询或更新

表示应用程序关系。当某些由值标识的值或实体以某种方式相关时,我们将该行放入表中以获得该关系。我们通过编写提及基表的查询来获取或放入参与基表关系组合的关系的行。 JOIN表返回与其他人关系相关的行。 UNION返回与其他人关系相关的行。 ON和WHERE成为AND。等(Is there any rule of thumb to construct SQL query from a human-readable description?)通过设置列相等,我们强制相同的值或实体在多个关系中扮演角色。它们之间可能有也可能没有FK,但我们不需要知道查询或更新。

FKs获得称为“关系”,但它们不是。他们是事实。 (它们也是表&列中的“元”关系的“实例”。)它们声明表中某些列的子值始终也是某些表中某些列为PRIMARY KEY或UNIQUE的列的子值。 (这也意味着在应用程序情况下,使用表关系的某些含义始终为真。)向DBMS声明FOREIGN KEY意味着它可以拒绝不满足该约束的更新尝试作为错误。 FK声明也与SQL DBMS中的CASCADE规则绑定,从而简化了更新。