【发布时间】:2013-06-03 15:38:09
【问题描述】:
我有下表:
[id,lang,data]
主键是id
我想将主键更改为id,lang,而不会丢失表的内容。我必须运行什么查询才能更改它
谢谢
【问题讨论】:
我有下表:
[id,lang,data]
主键是id
我想将主键更改为id,lang,而不会丢失表的内容。我必须运行什么查询才能更改它
谢谢
【问题讨论】:
根据@GarnerJosh 的评论,您不能运行单个命令来更改它 - SQLite 不允许更改现有的表结构。相反,使用复合主键创建一个新表并将数据复制过来:
CREATE TABLE my_table_copy(
id INTEGER,
lang INTEGER,
data TEXT,
PRIMARY KEY (id, lang)
);
INSERT INTO my_table_copy (id, lang, data)
SELECT id, lang, data FROM my_table;
DROP TABLE my_table;
ALTER TABLE my_table_copy RENAME TO my_table;
【讨论】:
INSERT INTO my_table_copy (id, lang, data) SELECT id, lang, data FROM my_table ORDER BY (id,lang); 可以将较大表(约 100k 行)的查询速度提高 2 倍。