将数据从一个 SQLite 数据库复制到另一个数据库

我有2个 SQLite 数据库,它们有共同的数据,但用途不同,我想避免重新插入数据,所以我想知道是否可以将整个表从一个数据库复制到另一个数据库?

133118 次浏览

您必须使用 附件命令将 Database X 与 Database Y 连接起来,然后为要传输的表运行适当的 Insert Into 命令。

INSERT INTO X.TABLE SELECT * FROM Y.TABLE;
// "INSERT or IGNORE" if you want to ignore duplicates with same unique constraint

或者,如果列不按顺序匹配:

INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE;

考虑一个示例,其中我有两个数据库,即 allmsa.db 和 atlanta.db。假设数据库 allmsa.db 有用于美国所有 msa 的表,而数据库 atlanta.db 为空。

我们的目标是将 atlanta.db 表从 allmsa.db 复制到 atlanta.db。

步骤

  1. Sqlite3 atlanta.db (进入 atlanta 数据库)
  2. 附加 allmsa.db 注意,我们给出了要附加的数据库的整个路径。
  3. 使用 sqlite> .databases检查数据库列表 您可以将输出视为
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             /mnt/fastaccessDS/core/csv/atlanta.db
2    AM               /mnt/fastaccessDS/core/csv/allmsa.db 
  1. 现在你来到你的实际目标。使用命令 INSERT INTO atlanta SELECT * FROM AM.atlanta;

这应该能达到你的目的。

Objective-用于将表从数据库复制到另一个数据库的 C 代码

-(void) createCopyDatabase{


NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];


NSString *maindbPath = [documentsDir stringByAppendingPathComponent:@"User.sqlite"];;


NSString *newdbPath = [documentsDir stringByAppendingPathComponent:@"User_copy.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
char *error;


if ([fileManager fileExistsAtPath:newdbPath]) {
[fileManager removeItemAtPath:newdbPath error:nil];
}
sqlite3 *database;
//open database
if (sqlite3_open([newdbPath UTF8String], &database)!=SQLITE_OK) {
NSLog(@"Error to open database");
}


NSString *attachQuery = [NSString stringWithFormat:@"ATTACH DATABASE \"%@\" AS aDB",maindbPath];


sqlite3_exec(database, [attachQuery UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to Attach = %s",error);
}


//Query for copy Table
NSString *sqlString = @"CREATE TABLE Info AS SELECT * FROM aDB.Info";
sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy database = %s",error);
}


//Query for copy Table with Where Clause


sqlString = @"CREATE TABLE comments AS SELECT * FROM aDB.comments Where user_name = 'XYZ'";
sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error);
if (error) {
NSLog(@"Error to copy database = %s",error);
}
}

对于一次性操作,可以使用. dump 和. read。

从 old _ db. sqlite 转储表 my _ table

c:\sqlite>sqlite3.exe old_db.sqlite
sqlite> .output mytable_dump.sql
sqlite> .dump my_table
sqlite> .quit

将转储读入 new _ db. sqlite,假设那里的表不存在

c:\sqlite>sqlite3.exe new_db.sqlite
sqlite> .read mytable_dump.sql

现在你已经克隆了你的桌子。 要对整个数据库执行此操作,只需在.dump 命令中省略表名即可。

额外的好处: 数据库可以有不同的编码。

单行最简单正确的方法:

sqlite3 old.db ".dump mytable" | sqlite3 new.db

将保留主键和列类型。

我需要将数据从 sql server 压缩数据库移动到 sqlite,因此使用 sql server 2008,您可以右键单击表,选择“ Script Table To”,然后选择“ Data To Inserts”。复制插入语句删除‘ GO’语句,并且在使用‘ DB Browser for Sqlite’应用程序将其应用到 Sqlite 数据库时成功执行。

第一个场景: DB1.sqlite 和 DB2.sqlite 有相同的表(t1) ,但是 DB1比 DB2更“最新”。如果表很小,那么从 DB2中删除该表并使用数据重新创建它:

> DROP TABLE IF EXISTS db2.t1; CREATE TABLE db2.t1 AS SELECT * FROM db1.t1;

第二个场景: 如果是一个大型表,使用 INSERT if not exists类型的解决方案可能更好。如果你有一个 Unique Key列,它更直接,否则你需要使用字段的组合(可能每个字段) ,在某些时候,它仍然更快,只是 drop和重新 create的表; 它总是更直接(较少的思考需要)。


设置: 在没有 DB 的情况下打开 SQLite,后者在内存 main数据库中创建一个 temporary,然后打开 attach DB1.SQLite 和 DB2.SQLite

> sqlite3
sqlite> ATTACH "DB1.sqlite" AS db1
sqlite> ATTACH "DB2.sqlite" AS db2

并使用 .databases查看所附数据库及其文件。

sqlite> .databases
main:
db1: /db/DB1.sqlite
db2: /db/DB2.sqlite

如果使用 SQLite 数据库浏览器,可以按照以下步骤将表从一个数据库复制到另一个数据库:

  1. 打开应用程序的两个实例并并排加载源 db 和目标 db。
  2. 如果目标 db 没有该表,则从源 db“ Copy Create Statement”,然后将 SQL 语句粘贴到“ Execute SQL”选项卡中,并运行 SQL 来创建该表。
  3. 在源数据库中,将表导出为 CSV 文件。
  4. 在目标 db 中,将 CSV 文件导入具有相同表名的表。应用程序会问你是否要将数据导入到现有的表中,点击“是”。成交。

最简单的方法是通过 SQLiteStudio

如果你没有从 https://download.cnet.com/SQLiteStudio/3000-10254_4-75836135.html下载

步骤:

1. 添加两个数据库。

2. 单击“查看”选项卡,然后单击图中所示的数据库。

enter image description here

3. 右键单击要复制的表并复制它。enter image description here

  1. 右键单击要粘贴的数据库后粘贴表。 enter image description here

现在你完蛋了 enter image description here