2011-12-21 115 views
19

这两个我很混淆。他们是相同还是不同?有些书或人说他们是一样的,有些则说他们不一样。我试过但没有找到任何真实的答案。
请大家解决它。外键和引用键有什么区别?

回答

9

“引用键”在美国英语中不是关系建模或SQL实现中的正常技术术语。

外键“引用”某个其他表中的键;这可能是混淆来自何处吗?

5

你真的不叫东西参考关键 ...他们是同样的事情......你可能会看到这个词引用 SQLite中使用,例如:你可以使用如下语法启动数据库的作者和书籍。这可以让你证明一个作者可以有很多书。这告诉books.author_id(定义几行了)分贝引用author.id

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    firstname varchar(255) 
    lastname varchar(255) 
); 

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    author_id INTEGER, 
    title varchar(255), 
    published date, 
    FOREIGN KEY(author_id) REFERENCES author(id) 
); 
2

也许你正在使用的术语“参考键”有点松散?

一行中的外键值被称为“引用”包含相应键值的行。请注意,前面句子中的“reference”一词是一个动词,所以我们可以说我们有一个引用的外键值和一个引用的键值。

虽然它是被引用的关键值而不是表键约束,但我可以松散地说,我们可以说“引用键”是指构成可能被引用的值的行。然后我会看到“引用键”可能会成为“引用键”,但不会相信它的起源。

36

我假设你正在谈论使用,在不使用的FOREIGN KEY关键字REFERENCES,例如。

author_id INTEGER REFERENCES author(id) 

...而不是...

author_id INTEGER, 
FOREIGN KEY(author_id) REFERENCES author(id) 

答案是,这仅仅是同一事物的简写语法。当两者之间发生变化时,主要关心的应该是可读性。

+0

虽然第一个将不启用外键,第二个不会启用。第二种方式不再使用了吗? – schwiz 2014-10-13 22:38:41

+0

如果您尝试使用逆向工程从MySQL Workbench中的数据库创建图表,这也很重要。如果您在创建数据库时使用了fir选项,该工具将无法在图元素之间创建连接。 – 2016-12-14 10:59:39

2

外键“引用”某个其他表中的键。其他表中的该键称为引用键。如果您在phpmyadmin上使用图形功能,您可能会听到很多关于此的信息。

1

有2种方式申报的外键(S):

  1. 如果外键是一个属性:
    参考()

  2. 如果外键的列表属性

外键()参考文献

1

两个关键字“FOREIGN KEY”和“REFERENCES”关键字之间唯一且最重要的区别是虽然它们都使数据成为父表的子数据,但“FOREIGN KEY”用于创建表级约束,而REFERENCES关键字只能用于创建列级约束。列级约束只能在创建表时创建。但是可以使用ALTER TABLE命令添加表级约束。

1

外键必须表示主键。 简单地使用REFERENCES约束时,引用的键不一定是主键。

相关问题