使用外键创建表的SQLite语法

时间:2013-08-22 17:36:24

标签: sqlite android-sqlite

我正在创建一个包含外键引用的表。我想知道所需的语法。大多数情况下,我见过以下内容(来自http://www.sqlite.org/foreignkeys.html#fk_basics):

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,   
  trackname   TEXT,  
  trackartist INTEGER,  
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)  
);

但是,从同一个网站(http://www.sqlite.org/foreignkeys.html#fk_actions)我看到了这个:

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,  
  trackname   TEXT,   
  trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE  
);

后一种语法更简洁,但我想知道结果是否有所不同(除了ON UPDATE CASCADE,这当然有效果;我只包括它因为我完全复制了代码来自引用的网站,因为我不知道上面的语法只有在制作这样的规范时才适用)。我在Android工作,以防万一。

2 个答案:

答案 0 :(得分:32)

这个答案可能与您的答案无关,但我认为这对于使用android数据库的其他人有用 IN SQLite默认情况下禁用外键约束(为了向后兼容)。您必须使用

明确启用它
PRAGMA foreign_keys = 1

建立与数据库的连接后。 这里是官方文档的链接,可以更深入地解释它。 http://sqlite.org/foreignkeys.html 请导航到上面的链接中启用外键支持。

答案 1 :(得分:22)

请参阅syntax diagrams

第一种语法是表约束,而第二种语法是列约束。 在这些示例中,它们的行为相同。

对于多个列上的键,您需要一个表约束(您可以将一个列附加到其中)。