SQLite外键

Gee*_*ugs 40 sql sqlite android foreign-key-relationship create-table

我遵循http://www.sqlite.org/foreignkeys.html上的SQLite文档中的说明,但是我添加外键的尝试失败了.这是我的创建语句:

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
    );
Run Code Online (Sandbox Code Playgroud)

第一张表很好.错误发生在第二个语句中.我已经尝试将两个查询包装在一个事务中而没有.这是错误:

未知栏 "checklist_id" 外键的定义(代码1):在编译:CREATE TABLE项目(_id INTEGER PRIMARY KEY AUTOINCREMENT,外键(checklist_id)参考清单(_id),ITEM_TEXT TEXT,item_hint TEXT,item_order INTEGER,created_on INTEGER ,modified_on INTEGER)

Sce*_*cen 75

checklist_id INTEGER在将其添加为外键之前,您仍需要创建该列.

所以它会是:

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)
    );
Run Code Online (Sandbox Code Playgroud)


lor*_*tol 5

在使用 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
    );
Run Code Online (Sandbox Code Playgroud)


Sim*_*iak 5

只是您checklist_id项目表中缺少列。您需要先声明它,然后才能将其设置为FOREIGN KEY. 您试图FK在不存在的列上创建,这就是它不起作用的原因。

所以你需要添加这个:

checklist_id INTEGER,
FOREIGN KEY(checklist_id) REFERENCES checklist(_id)
Run Code Online (Sandbox Code Playgroud)

现在它应该可以工作了。