Sqlite中的REFERENCES关键词
有没有人知道在sqlite中,REFERENCES这个关键词是干什么用的?比如我有这样一句话:fr int REFERENCES contacts(id)
,这是什么意思?如果我想用SELECT count(fr) from TABLE WHERE
来查找某个联系人的id,我该怎么做呢?
换句话说,我想写一个SELECT
语句,来统计有多少个fr
的值是某个特定的联系人id。
2 个回答
1
这段话的意思是,它创建了一个外键,这个外键指向了contacts
表中的id
字段。不过我不太记得这样的写法是否可以在字段后面使用。你可以这样做,比如:
CREATE TABLE foo (
id int,
fr int,
FOREIGN KEY(fr) REFERENCES bar(id)
);
2
为了回答问题的另一部分,你可以这样做:
select count(*) from tablename where fr = contactid;
这里的“references”表示fr字段包含了来自contacts表中id字段的值。
再多说点细节:你有两个表,一个是contacts,另一个是“tablename”。在contacts表里,你有各种人的详细信息,每个人都有一个id。而在“tablename”里,你有一些额外的信息,每一行都是关于contacts表中某个人的。所以“tablename”中的每一行都有一个fr字段,用来标识这个人。这个fr字段里存的是那个人的id值(可以推测每个人的id都是不同的)。这就是“references”告诉你的意思——fr字段里存的是id的一个副本。
所以你想要做的就是找出“tablename”中每个人的记录数量。通常这意味着要把两个表连接起来,但在这个情况下你不需要,因为“tablename”中已经有了那个人的id的本地副本。所以你只需要找到“tablename”中fr字段等于那个人id的行,并对它们进行计数。这意味着你只需要找到那些fr等于id的行(因为你知道fr是来自contacts表的id的副本)。