【问题标题】:How to create a relation with a defaule value between two existing tables?如何在两个现有表之间创建具有默认值的关系?
【发布时间】:2016-05-22 19:40:52
【问题描述】:

我有两个现有的表,workTable 和 table_jobs。我想更新我的 workTable 并使用默认值创建与 table_jobs 的关系。这是我尝试过的:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    switch (oldVersion){
        case 3:{

            int jobid = insertJobWithoutClosing(new Job("Default", Color.rgb(0, 0, 255)), db);
            db.execSQL("ALTER TABLE " + workTable + " ADD COLUMN " + colJobID + " INTEGER DEFAULT " + jobid + " FOREIGN KEY("+colJobID+") REFERENCES "+table_jobs+"("+job_ID+")");

        }

    }

这给了我以下例外:

android.database.sqlite.SQLiteException: near "FOREIGN": syntax error (code 1): , while compile: ALTER TABLE WorkObjects ADD COLUMN JobID INTEGER DEFAULT 1 FOREIGN KEY(JobID) REFERENCES Jobs(jobsID)

怎么了?

【问题讨论】:

    标签: android sqlite foreign-keys relationship alter-table


    【解决方案1】:

    FOREIGN KEY 子句是一个表约束。 ALTER TABLE 不支持表约束。

    你必须使外键约束成为列约束:

    ALTER TABLE WorkObjects
    ADD COLUMN JobID INTEGER DEFAULT 1 REFERENCES Jobs(jobsID);
    
    Error: Cannot add a REFERENCES column with non-NULL default value
    

    哦,好吧。您必须重新创建表。

    【讨论】:

      【解决方案2】:

      Here there is a well explained answer for this好像只有在建表的时候才能添加外键。您可以将数据移动到新的临时表中,然后使用外键约束重新创建原始表。

      【讨论】:

        猜你喜欢
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多