试图理解外键语法

时间:2013-09-14 16:50:25

标签: sql sqlite

刚开始使用SQL。我理解外键的想法很好,但我正在尝试学习如何实现它们的语法并阅读sqlite page只是给了我更多问题而不是答案。以下两行有什么不同吗?

CREATE TABLE child(x REFERENCES parent(id));
CREATE TABLE child(FOREIGN KEY x REFERENCES parent(id));

另外,根据我的理解,列是由“table.column”格式指定的,所以我想在上面输入“parent.id”,但似乎我所做的所有阅读都说“parent(id)” )”。这两者之间有什么区别,为什么有时候使用parent.id而另一些使用parent(id)?

我们是不是应该将任何类型的亲和力(我认为我正确地使用术语)绑定到外键,因为它应该只使用父键使用的任何东西?

我有更多问题,但这是一个好的开始。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

之间的区别:

CREATE TABLE child(x REFERENCES parent(id));

CREATE TABLE child(FOREIGN KEY x REFERENCES parent(id));

是第一个创建一个表,其中一列名为x,外键约束。第二个创建一个没有任何列但只有外键约束的表。第二个语句应该失败,因为它引用了一个未知列x

如果外键由多列组成,则必须单独声明它。对于一列,

column1 references parent(column1)

工作正常。对于多列,您需要:

column1, column2, foreign key (column1, column2) references parent(column1, column2)

这也解释了为什么table.column格式不够用。它没有提供指定多列的方法。