外键和引用键有什么区别?

时间:2011-12-21 20:10:02

标签: sql database foreign-keys

我对这两个词很困惑。它们是相同还是不同?

有些书和人说他们是一样的,有些人说他们是不同的。

我试过但找不到确凿的答案。

10 个答案:

答案 0 :(得分:51)

我假设您正在讨论使用未使用REFERENCES关键字的FOREIGN KEY,例如。

author_id INTEGER REFERENCES author(id)

......而不是......

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

答案是,它只是同一事物的简写语法。改变两者之间的主要问题应该是可读性。

答案 1 :(得分:9)

“参考密钥”不是关系建模或美国英语SQL实现中的常规技术术语。

外键“引用”其他表中的键;这可能是混乱的来源吗?

答案 2 :(得分:6)

你并没有真正称之为引用键 ......它们是相同的......你可能会在sqlite中看到 references 这个词:您可以使用这样的语法来启动作者和书籍的数据库。这可以让您显示一位作者可以拥有多本书。这告诉数据库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)
);

答案 3 :(得分:3)

也许你有点松散地使用“引用键”一词?

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

虽然它是关键值,而不是正在引用的表键约束,但我想松散地说,我们可以说“引用键”表示包含可能被引用的值的行。然后我看到“引用的密钥”如何成为“引用密钥”但不相信它的起源。

答案 4 :(得分:3)

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

答案 5 :(得分:2)

外键“引用”某个其他表中的键。其他表中的那个键叫做Referenced键。如果你在phpmyadmin上使用Graphic功能,你可能会听到很多关于这一点。

答案 6 :(得分:2)

就标准 SQL 而言,两者都会导致外键约束。

一种形式是表约束,这意味着它可以应用于一列或多列。您需要它来引用具有多列主键的表:

CREATE TABLE child (
    id int PRIMARY KEY,
    parent_id int,
    date date,
    FOREIGN KEY (parent_id, date) REFERENCES parent(id, date)
);

另一种形式是列约束,这意味着它只能应用于定义它的单个列。它不能用于引用具有多列主键的表。

CREATE TABLE child (
    id int PRIMARY KEY,
    parent_id int REFERENCES parent(id)
);

上面的语法与为单列声明表约束完全相同(假设 RDBMS 支持这种类型的列约束),如下所示:

CREATE TABLE child (
    id int PRIMARY KEY,
    parent_id int,
    FOREIGN KEY (parent_id) REFERENCES parent(id)
);

MySQL 及其 InnoDB 存储引擎的用户经常会感到困惑,因为不支持后一种列约束样式。您必须为外键定义表级约束,即使它是单列约束。从早期开始,这是 MySQL 的一个奇怪行为,即某些约束语法是有效的,但不会产生任何约束。请参阅此处的讨论:https://bugs.mysql.com/bug.php?id=17943

答案 7 :(得分:1)

有两种方法可以声明外键:

  1. 如果外键是SINGLE属性:
     参考文献()

  2. 如果外键是属性列表

  3. FOREIGN KEY()REFERENCES

答案 8 :(得分:1)

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

答案 9 :(得分:0)

引用键是另一个表中引用的主键。 另一方面,外键是将第二个表链接到主表的主键(或参考键)的方法。