SQLite Foreign Key

前端 未结 5 1477
刺人心
刺人心 2020-12-24 01:15

I\'m following the instructions from the SQLite documentation at http://www.sqlite.org/foreignkeys.html however my attempt to add a foreign key is failing. Here are my crea

相关标签:
5条回答
  • 2020-12-24 01:40

    Put the FOREIGN KEY definition at the end of the SQL statement

    0 讨论(0)
  • 2020-12-24 01:45

    I think the above answers are not entirely correct, or at least slightly misleading. As they correctly pointed out, you can create the column, then on a separate line add a foreign key constraint. This is called specifying a table constraint.

    But there is also a shorter syntax, when applying only on 1 column, all 4 possible constraints (PRIMARY KEY, UNIQUE, CHECK, FOREIGN KEY) can also be specified inline (like NOT NULL, for example), as a column constraint. I.e. you can write:

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

    By the way, if you are ever unsure about the correct syntax, the official documentation has really nice railroad diagrams.

    0 讨论(0)
  • 2020-12-24 01:47

    Simply you are missing checklist_id column in your item table. You need to declare it before you want to set it as FOREIGN KEY. You tried to create FK on non-existing column and this is reason why it doesn't work.

    So you need to add this:

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

    now it should works.

    0 讨论(0)
  • 2020-12-24 01:48

    You need to include the column name before you wrap it with 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
        );
    
    0 讨论(0)
  • 2020-12-24 01:59

    You still have to create the column checklist_id INTEGER before you add it as a Foreign key.

    So it would be:

    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)
        );
    
    0 讨论(0)
提交回复
热议问题