使用外键创建表的SQLite语法

hBr*_*ent 43 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)  
);
Run Code Online (Sandbox Code Playgroud)

但是,从同一个站点(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  
);
Run Code Online (Sandbox Code Playgroud)

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

war*_*ero 34

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

PRAGMA foreign_keys = 1
Run Code Online (Sandbox Code Playgroud)

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


CL.*_*CL. 24

请参阅语法图.

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

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