在现有的sqlite表中创建主键

时间:2018-05-28 20:47:38

标签: sqlite primary-key alter

SQL新手在这里。我有一个带有表的sqlite(3.23.1)数据库,称之为'fp',包含109列和494266条记录。该表未使用主键创建。我理解(根据http://www.sqlite.org/lang_altertable.html)我无法从原始表创建主键。精细。我想创建一个新表,其中包含一个用作主键的附加列'id',然后保留fp的其余模式和数据。

我使用.schema fp来获取最初用于创建表的命令,然后只是添加了必要的子句(是正确的术语吗?):

CREATE TABLE fp_new( id INTEGER PRIMARY KEY, ... 109 more entries )

如何有效填充此表?我想做一些简单的事情,但是,恰当地说,收到一个错误:

sqlite> INSERT INTO fp_new SELECT * FROM fp; Error: table fp_new has 110 columns but 109 values were supplied

有没有办法以编程方式执行此操作而无需专门命名我需要插入的109列?

我尝试创建一个只有id INTEGER PRIMARY KEY列的表,并使用递归触发器将其填充为范围从1到494266,然后将其连接到隐含row_id列上的原始表。后者,但递归限制是1000,我想这样做,而不必重新编译sqlite3,如果可能的话。

我认为答案分散在各种stackexchange帖子中,但我似乎无法找到我需要的正确集合。

谢谢你, d

1 个答案:

答案 0 :(得分:2)

您必须编写一个提供110列的查询。

这不是问题,因为*不一定是唯一的问题:

INSERT INTO fp_new SELECT NULL, * FROM fp;