Sqlite 在SQLLite中复制表数据时出现主键错误

Sqlite 在SQLLite中复制表数据时出现主键错误,sqlite,copy,primary-key,Sqlite,Copy,Primary Key,我创建了第二个表,希望将数据从第一个表复制到该表 表2的结构与表1相同,只有部分列是COLLATE NOCASE。除此之外,表名和表名是相同的 每个表都有主键: hID INTEGER PRIMARY KEY AUTOINCREMENT 复制时,我在以下查询中遇到错误: INSERT INTO table2 SELECT * FROM table1 错误: PRIMARY KEY must be unique 我假设原始数据是唯一的,因为它总是有PK 我希望在复制时保留原始hID(

我创建了第二个表,希望将数据从第一个表复制到该表

表2的结构与表1相同,只有部分列是COLLATE NOCASE。除此之外,表名和表名是相同的

每个表都有主键:

hID INTEGER PRIMARY KEY AUTOINCREMENT
复制时,我在以下查询中遇到错误:

INSERT INTO table2 SELECT * FROM table1
错误:

PRIMARY KEY must be unique    
我假设原始数据是唯一的,因为它总是有PK

我希望在复制时保留原始hID(即,我不希望为复制的旧数据设置新的hID)

在MySQL中,我通常会在复制数据后对第二个表应用PK,但我认为在SQLLite中不允许这样做


有人能用我的方式解释这个错误吗?

在插入table1值之前,table2肯定是空的?表具有完全相同的结构,列的顺序也相同?无法重现您的问题。表2在插入之前是空的吗?还有,为什么要因为排序规则而复制所有数据?只需为第一个表创建具有不同排序规则的索引!我将检查表是否真的为空,但对不同的排序规则重新使用索引——这是我最初做的,但在查询中发现了被忽略的索引。测试了一个列中包含排序规则的新表,结果成功了。我的索引:创建索引,如果表1上不存在authorIdx作者、标题、hID校对nocase。忽略该索引的我的查询:从表1中选择*按作者排序COLLATE NOCASE ASC、Title COLLATE NOCASE ASC、hID COLLATE NOCASE ASC LIMIT 100。也忽略它-按作者、标题、hID限制100从表1中选择*顺序。我的索引不正确-如果表1作者、标题、hID COLLATE NOCASE上不存在idx,则为创建索引,而不是创建索引如果表1作者COLLATE NOCASE、标题COLLATE NOCASE、hID COLLATE NOCASE上不存在idx。因此,正如LS_Lev所说,我不需要重新创建表,只需要创建适当的索引。谢谢