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

piok6c0g  于 2022-11-15  发布在  SQLite
关注(0)|答案(9)|浏览(784)

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

gudnpqoy

gudnpqoy1#

您必须使用ATTACH命令将数据库X与数据库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;
pw9qyyiw

pw9qyyiw2#

在一行中使用最简单、最正确的方法:

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

主键和列类型将被保留。

iyzzxitl

iyzzxitl3#

假设我有两个数据库,即allmsa.db和atlanta.db。假设数据库allmsa.db包含美国所有MSA的表,而数据库atlanta.db为空。
我们的目标是将表Atlanta从allmsa.db复制到atlanta.db。

步骤

1.sqlite3 atlanta.db(进入Atlanta数据库)
1.附加allmsa.db。这可以使用命令ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM;来完成,请注意,我们给出了要附加的数据库的完整路径。
1.使用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;
这应该能达到你的目的。

guicsvcw

guicsvcw4#

对于一次性操作,您可以使用.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

现在,您已经克隆了表。要对整个数据库执行此操作,只需在.ump命令中省略表名即可。
额外的好处:数据库可以有不同的编码。

hgqdbh6s

hgqdbh6s5#

将表从一个数据库复制到另一个数据库的目标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);
        }
 }
uz75evzq

uz75evzq6#

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

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

第二种情况:如果是一张大table,使用INSERT if not exists类型的解决方案可能会更好。如果您有一个Unique Key列,则更直接,否则您将需要使用字段组合(可能是每个字段),并且在某些情况下,仅使用drop并重新对表进行create会更快;它总是更直接(不需要考虑太多)。
设置:在没有数据库的情况下打开SQLite,这会在内存中创建temporary数据库main,然后打开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
gwo2fgha

gwo2fgha7#

最简单的方式是通过SQLite Studio

如果您没有从https://download.cnet.com/SQLiteStudio/3000-10254_4-75836135.html下载
步骤:
1.添加两个数据库。
2.点击查看选项卡,然后点击数据库,如图所示。

3.右键单击要复制的表并复制它。

1.在要粘贴的数据库上单击鼠标右键后粘贴表格。

现在您完成了

k0pti3hp

k0pti3hp8#

我需要将数据从一个SQL SERVER压缩数据库移动到SQLite,所以使用SQL SERVER 2008,您可以右击该表,然后选择“编写表到”,然后选择“数据到插入”。复制INSERT语句删除‘GO’语句,当使用‘DB Browser for Sqlite’应用程序应用于SQLite数据库时,它将成功执行。

envsm3lx

envsm3lx9#

如果您使用DB Browser for SQLite,则可以通过以下步骤将表从一个数据库复制到另一个数据库:
1.打开APP的两个示例,同时加载源数据库和目标数据库。
1.如果目标数据库没有表,则从源数据库复制CREATE语句,然后将SQL语句粘贴到执行SQL选项卡中,然后运行SQL来创建表。
1.在源数据库中,将表导出为CSV文件。
1.在目标数据库中,将CSV文件导入到同名的表中。应用程序将询问您是否要将数据导入到现有表中,单击是。好了。

相关问题