我想将两个或多个sqlite databases
与same schema
合并,其中每个数据库中的一列具有自动增量的主键。
对于前:
我有两个数据库:
student1.db
idx
name
age
另一个数据库:student2.db
idx
name
age
我已将idx
列primary key
添加为auto increment
。
现在我想将student2.db
与student1.db
合并而不创建temp db
。
合并它之后的一些student1.db
应该如下所示。
student1.db after merge
:
idx
name
`年龄
我知道我们可以使用附件。但如果其中一列是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;
请告诉我如何将两个数据库与主键合并 非常感谢您对此的帮助。
提前致谢。
答案 0 :(得分:0)
当INTEGER PRIMARY KEY列的插入值为NULL时,SQLite会创建新的ID。
所以你必须复制除 ID
之外的所有列。INSERT INTO student(name, age)
SELECT name, age
FROM toMerge.student;