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语句的末尾