如何将两个sqlite3数据库与具有主键和自动增量的相同模式合并

时间:2014-11-28 05:56:09

标签: mysql database sqlite

我想将两个或多个sqlite databasessame schema合并,其中每个数据库中的一列具有自动增量的主键。

对于前: 我有两个数据库: student1.db

idx name age

  1. abc 15
  2. def 16
  3. ghi 15
  4. jkl 16
  5. 另一个数据库:student2.db

    idx name age

    1. mno 15
    2. pqr 16
    3. stu 16
    4. vwx 15
    5. 我已将idxprimary key添加为auto increment

      现在我想将student2.dbstudent1.db合并而不创建temp db。 合并它之后的一些student1.db应该如下所示。

      student1.db after merge

      idx name`年龄

      1. abc 15
      2. def 16
      3. ghi 15
      4. jkl 16
      5. mno 15
      6. pqr 16
      7. stu 16
      8. vwx 15
      9. 我知道我们可以使用附件。但如果其中一列是primary key并且具有自动增量,则不会合并。合并后,我希望idx列以增量方式附加existing idx列。

        以下是.schema for student1 and student2 db

        sqlite3 student1.db

        源码> .schema

        CREATE TABLE student (
        
         'idx' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
        
         'name' CHAR(32) NOT NULL,
        
         'age' INTEGER NOT NULL default 0,
        
          UNIQUE (name)
        
          );
        
        
         sqlite> select * from student;
        
          1|abc|15
        
          2|def|16
        
          3|ghi|15
        
          4|jkl|16
        
          sqlite>
        
          sqlite3 student2.db
        
          SQLite version 3.6.20
        
          Enter ".help" for instructions
        
          Enter SQL statements terminated with a ";"
        
          sqlite> .schema
        
          CREATE TABLE student (
        
          'idx' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
        
          'name' CHAR(32) NOT NULL,
        
          'age' INTEGER NOT NULL default 0,
        
           UNIQUE (name)
        
          );
        
          sqlite> select * from student;
        
          1|mno|15
        
          2|pqr|16
        
          3|stu|15
        
          4|vwx|16
        
          sqlite>
        
        
        
         This is what I used to merge two database. 
        
         attach './student2.db' as toMerge;
        
         BEGIN;
        
          insert or ignore into student
        
          select * from toMerge.student;
        
          COMMIT;
        
          detach database toMerge;
        

        请告诉我如何将两个数据库与主键合并 非常感谢您对此的帮助。

        提前致谢。

1 个答案:

答案 0 :(得分:0)

当INTEGER PRIMARY KEY列的插入值为NULL时,SQLite会创建新的ID。

所以你必须复制除 ID

之外的所有列

INSERT INTO student(name, age)
SELECT name, age
FROM toMerge.student;