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
答案 0 :(得分:2)
您必须编写一个提供110列的查询。
这不是问题,因为*
不一定是唯一的问题:
INSERT INTO fp_new SELECT NULL, * FROM fp;