SQLite外键

我正在从http://www.sqlite.org/foreignkeys.html SQLite文档的说明,但是我尝试添加一个外键失败。 这里是我的创build语句:

CREATE TABLE checklist ( _id INTEGER PRIMARY KEY AUTOINCREMENT, checklist_title TEXT, description TEXT, created_on INTEGER, modified_on INTEGER ); CREATE TABLE item ( _id INTEGER PRIMARY KEY AUTOINCREMENT, FOREIGN KEY(checklist_id) REFERENCES checklist(_id), item_text TEXT, item_hint TEXT, item_order INTEGER, created_on INTEGER, modified_on INTEGER ); 

第一张桌子被罚款。 第二条语句发生错误。 我已经尝试了在事务中包装这两个查询,而没有。 这是错误:

CREATE TABLE item(_id INTEGER PRIMARY KEY AUTOINCREMENT,FOREIGN KEY(checklist_id)REFERENCES checklist(_id),item_text TEXT,item_hint TEXT,item_order INTEGER,created_on INTEGER在外键定义(代码1)中的未知列“checklist_id” ,modified_on INTEGER)

在将其添加为外键之前,您仍然需要创build该列。

所以这将是:

 CREATE TABLE checklist ( _id INTEGER PRIMARY KEY AUTOINCREMENT, checklist_title TEXT, description TEXT, created_on INTEGER, modified_on INTEGER ); CREATE TABLE item ( _id INTEGER PRIMARY KEY AUTOINCREMENT, checklist_id INTEGER, item_text TEXT, item_hint TEXT, item_order INTEGER, created_on INTEGER, modified_on INTEGER, FOREIGN KEY(checklist_id) REFERENCES checklist(_id) ); 

只是你缺less项目表中的checklist_id列。 您需要先声明它,然后再将其设置为FOREIGN KEY 。 您尝试在不存在的列上创buildFK ,这是不起作用的原因。

所以你需要添加这个:

 checklist_id INTEGER, FOREIGN KEY(checklist_id) REFERENCES checklist(_id) 

现在它应该工作。

在使用FOREIGN KEY()包装之前,需要包含列名。

 CREATE TABLE item ( _id INTEGER PRIMARY KEY AUTOINCREMENT, checklist_id INTEGER, FOREIGN KEY(checklist_id) REFERENCES checklist(_id), item_text TEXT, item_hint TEXT, item_order INTEGER, created_on INTEGER, modified_on INTEGER ); 

将FOREIGN KEY定义放在SQL语句的末尾