在 SQL 语句中无法使用 JOIN 的外键可以做什么?
What can I do with a foreign key that I can't with JOIN in a SQL statement?
他们说外键是为了使两个表之间的关系成为可能,但我可以在使用 JOIN 的语句中做到这一点。确切地说,我可以用 SQL 语句中的 foreing 键做什么,而我不能用 JOIN 做?或者外键只是在我们处理数据库中的表时帮助我们?
外键是为了保护数据库的完整性而设计的。您可以在不存在任何外键的情况下通过连接读取数据(我们一直这样做)。
外键的作用是防止您通过删除子记录引用的父记录等操作来破坏数据。如果您尝试在不先删除子记录的情况下删除父记录,则会出错,从而防止数据损坏。也可以配置为如果删除父项,子项记录将自动删除。
两个 table 的行之间的关系可以通过在每个 table 的列中存储一个 "common value" 来建立。 (这是关系数据库理论的基本原则。)
FOREIGN KEY
是数据库中的完整性约束。如果定义(并强制执行)了外键约束,数据库将禁止将无效值存储在行中(通过 INSERT
和 UPDATE
语句,并防止行被删除(通过 DELETE
语句。)
SQL 语句中的 JOIN
操作只允许我们访问多个 table。通常,连接操作将包含条件,这些条件需要一个 table 中的 "match" 外键和另一个 table 中的主键。但这不是必需的。在各种条件下 "join" table 是可能的,或者根本没有条件 (CROSS JOIN
)。
我们不使用 FK(外键)进行查询或更新。
表表示应用关系。当某些值或由值标识的实体以某种方式相关时,我们将该行放在 table 中以表示该关系。我们通过编写提及基 table 的查询来获取或放置参与从基 table 关系组合的关系的行。 JOIN of tables returns 由一个人的关系和其他人的关系相关的行。 UNION returns 由一个人或另一个人的关系相关的行。 ON 和 WHERE 变成 AND。等等 (Is there any rule of thumb to construct SQL query from a human-readable description?) 通过将列设置为相等,我们强制相同的值或实体在多个关系中扮演角色。它们之间可能有也可能没有 FK,但我们不需要知道查询或更新。
FK 被称为 "relationships",但事实并非如此。它们是事实。 (它们也是 "instances" 来自 table 和列的 "meta" 关系。)他们声明 table 中某些列的子行值始终也是 table 的子行值有些列在某些 table 中是 PRIMARY KEY 或 UNIQUE。 (这也意味着使用 tables 关系的某种暗示在应用程序情况下始终为真。)向 DBMS 声明一个 FOREIGN KEY 意味着它可以拒绝不满足该约束的更新尝试作为错误. FK 声明也与 SQL DBMS 中的 CASCADE 规则相关联,从而简化了更新。
他们说外键是为了使两个表之间的关系成为可能,但我可以在使用 JOIN 的语句中做到这一点。确切地说,我可以用 SQL 语句中的 foreing 键做什么,而我不能用 JOIN 做?或者外键只是在我们处理数据库中的表时帮助我们?
外键是为了保护数据库的完整性而设计的。您可以在不存在任何外键的情况下通过连接读取数据(我们一直这样做)。
外键的作用是防止您通过删除子记录引用的父记录等操作来破坏数据。如果您尝试在不先删除子记录的情况下删除父记录,则会出错,从而防止数据损坏。也可以配置为如果删除父项,子项记录将自动删除。
两个 table 的行之间的关系可以通过在每个 table 的列中存储一个 "common value" 来建立。 (这是关系数据库理论的基本原则。)
FOREIGN KEY
是数据库中的完整性约束。如果定义(并强制执行)了外键约束,数据库将禁止将无效值存储在行中(通过 INSERT
和 UPDATE
语句,并防止行被删除(通过 DELETE
语句。)
SQL 语句中的 JOIN
操作只允许我们访问多个 table。通常,连接操作将包含条件,这些条件需要一个 table 中的 "match" 外键和另一个 table 中的主键。但这不是必需的。在各种条件下 "join" table 是可能的,或者根本没有条件 (CROSS JOIN
)。
我们不使用 FK(外键)进行查询或更新。
表表示应用关系。当某些值或由值标识的实体以某种方式相关时,我们将该行放在 table 中以表示该关系。我们通过编写提及基 table 的查询来获取或放置参与从基 table 关系组合的关系的行。 JOIN of tables returns 由一个人的关系和其他人的关系相关的行。 UNION returns 由一个人或另一个人的关系相关的行。 ON 和 WHERE 变成 AND。等等 (Is there any rule of thumb to construct SQL query from a human-readable description?) 通过将列设置为相等,我们强制相同的值或实体在多个关系中扮演角色。它们之间可能有也可能没有 FK,但我们不需要知道查询或更新。
FK 被称为 "relationships",但事实并非如此。它们是事实。 (它们也是 "instances" 来自 table 和列的 "meta" 关系。)他们声明 table 中某些列的子行值始终也是 table 的子行值有些列在某些 table 中是 PRIMARY KEY 或 UNIQUE。 (这也意味着使用 tables 关系的某种暗示在应用程序情况下始终为真。)向 DBMS 声明一个 FOREIGN KEY 意味着它可以拒绝不满足该约束的更新尝试作为错误. FK 声明也与 SQL DBMS 中的 CASCADE 规则相关联,从而简化了更新。