Android 如何在SQLDelight中更改表的主键?

Android 如何在SQLDelight中更改表的主键?,android,mysql,migration,primary-key,sqldelight,Android,Mysql,Migration,Primary Key,Sqldelight,我们正在进行一个项目,其中有SQLDelight数据库和DBRevisionPhase表: CREATE TABLE DbRevisionPhrase ( userId TEXT NOT NULL, phraseId TEXT NOT NULL, vocabularyId TEXT NOT NULL, isMissed INTEGER AS Boolean NOT NULL DEFAULT 0, countAnswers INTEGER NOT NULL

我们正在进行一个项目,其中有SQLDelight数据库和DBRevisionPhase表:

CREATE TABLE DbRevisionPhrase (
    userId TEXT NOT NULL,
    phraseId TEXT NOT NULL,
    vocabularyId TEXT NOT NULL, 
    isMissed INTEGER AS Boolean NOT NULL DEFAULT 0,
    countAnswers INTEGER NOT NULL,
    PRIMARY KEY (userId, phraseId, vocabularyId)
);
在我们想添加一个新字段reviewType并将其添加到主键后,结果是这样的:

import com.baoui.db.ReviewType;

CREATE TABLE DbRevisionPhrase (
    userId TEXT NOT NULL,
    phraseId TEXT NOT NULL,
    vocabularyId TEXT NOT NULL, 
    isMissed INTEGER AS Boolean NOT NULL DEFAULT 0,
    countAnswers INTEGER NOT NULL,
    type TEXT AS ReviewType,
    PRIMARY KEY (userId, phraseId, vocabularyId, type)
);
但我们也需要迁移,尝试这样做我们失败了:

ALTER TABLE DbRevisionPhrase ADD COLUMN type TEXT;
ALTER TABLE DbRevisionPhrase DELETE PRIMARY KEY;
ALTER TABLE DbRevisionPhrase ADD PRIMARY KEY (userId, phraseId, vocabularyId, type);
有误:

android.database.sqlite.SQLiteException: incomplete input (code 1 SQLITE_ERROR): , while compiling: ALTER TABLE DbRevisionPhrase

我们是否可以以某种方式更改表的主键,或者我们需要删除表,并通过移动所有数据创建一个新表?

不幸的是,使用
ALTER table
语句将无法实现这一点。您必须创建一个新表,并将现有表迁移到上一个表。它看起来像这样:

CREATE TABLE DbRevisionPhrase_new(
  ...
);
INSERT INTO DbRevisionPhrase_new 
SELECT * FROM DbRevisionPhrase;
DROP TABLE DbRevisionPhrase;
ALTER TABLE DbRevisionPhrase_new RENAME TO DbRevisionPhrase;