【发布时间】:2016-10-02 13:03:01
【问题描述】:
我有一个名为 database1 的 SQLite 数据库和一个名为 t1 的表和一个名为 database2 的表 t2。我想将表t2 从database2 导入database1。我应该使用什么命令?
【问题讨论】:
标签: sqlite
我有一个名为 database1 的 SQLite 数据库和一个名为 t1 的表和一个名为 database2 的表 t2。我想将表t2 从database2 导入database1。我应该使用什么命令?
【问题讨论】:
标签: sqlite
使用sqlite3 command-line tool 打开database2 并使用命令.schema t2 读取表定义。
(或者,使用任何其他允许读取表定义的工具。)
然后用命令打开database1、attach另一个数据库:
ATTACH 'database2file' AS db2;
然后创建表t2,并将数据复制过来:
INSERT INTO t2 SELECT * FROM db2.t2;
【讨论】:
外壳命令:
sqlite3 database1
在 SQLite 外壳中:
sqlite> ATTACH 'database2' AS db2;
sqlite> CREATE TABLE t1 AS SELECT * FROM db2.t2;
【讨论】:
您可以使用 sqlite3 .dump 命令将转储输出通过管道传输到另一个数据库。它接受一个带有表名的可选参数。
db1=~/mydb1.sqlite
db2=~/mydb2.sqlite
t=t2
sqlite3 "$db2" ".dump $t" | sqlite3 "$db1"
如果两个数据库都没有公用表,可以省略表名,复制所有表。
如果表很大,这可能会很慢,因为它会执行 INSERT。如果它们很大,而且真的太慢,也许.import 会更快。您可以尝试类似
sqlite3 "$db2" ".schema $t" | sqlite3 "$db1"
sqlite3 "$db2" "SELECT * FROM $t" | sqlite3 "$db1" ".import /dev/stdin $t"
【讨论】: