gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:55:16 25 4
gpt4 key购买 nike

我们正在处理一些我们有 SQLDelight 数据库和 DBRevisionPhrase 表的项目:

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 并将其添加到 PRIMARY KEY 之后,结果是这样的:
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;

关于android - 如何在 SQLDelight 中更改表的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61933362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com