• 创建一个新表,与原始表具有相同的架构和索引:
  • CREATE
    
    
    
    
        
     TABLE new_table AS SELECT * FROM original_table WHERE 0;
    

    这将创建一个名为new_table的新表,其结构与original_table相同,但是不会复制原始表的数据。

  • 添加原表中的所有索引到新表:
  • SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = 'original_table';
    

    此命令将返回原始表的所有索引的名称和创建SQL语句。将这些SQL语句复制到剪贴板中。

    然后,使用以下命令将所有索引添加到新表:

    PRAGMA foreign_keys=off;
    BEGIN TRANSACTION;
    <将从上面的命令中复制的索引SQL语句粘贴到这里>
    COMMIT;
    PRAGMA foreign_keys=on;
    

    此命令将禁用外键约束,然后使用事务将所有索引添加到新表中,并重新启用外键约束。

  • 最后,将原始表的数据插入新表中:
  • INSERT INTO new_table SELECT * FROM original_table;
    

    这将从原始表复制所有数据并将其插入新表中。

    现在,您可以使用new_table进行操作,并且它将包含原始表的所有数据和索引。

    请注意,在复制表和索引之前,最好备份数据库以防意外发生。

  •