6

是否可以将具有不同列名的相关数据从一个数据库迁移到另一个数据库?我在这里谈论非常大量的数据。有人有想法吗?我尝试将其导出到 CSV 并导入到其他数据库,但我收到错误消息:

invalid column count in CSV input in line 1

因此,如果有人有有效的方法来做到这一点,请分享。或者,如果有人可以通过excel中的这个CSV映射指导mo如何正确地做到这一点,我将不胜感激

4

4 回答 4

11

这其中有两种情况:

  1. 数据库存储在同一台服务器中
  2. 数据库存储在不同的服务器中

解决方案 1:同一服务器中的数据库

您只需要在目标表中插入数据:

insert into dbDestination.tblDestination (field1, field2, ...)
select ...
from dbSource.tblSource

笔记

  1. select语句必须包含您需要复制到目标表的字段。
  2. 语句中的字段必须与部分select字段列表中指定的字段顺序相同insert

解决方案2:不同服务器中的数据库

我会将数据导出到纯文本文件,然后将其导入。我个人更喜欢 .csv 文件,但这取决于你。

您有两种可能:使用select... into outfile或使用系统终端(命令窗口)。

一个。使用select... into outfileload data

  1. 在服务器中dbSource是:

    select ...
    from dbSource.tblSource
    into outfile [your destination file]
    ...
    
  2. 将文件复制到目标服务器。

  3. 在服务器中dbDestination是:

    加载数据本地 infile [您的文件] ...

笔记

  1. 语句中的字段必须与部分select字段列表中指定的字段顺序相同insert
  2. 查看 MySQL 参考手册以了解select... into outfileload data...

湾。使用终端

  1. 在 Linux(或其他 Unix 系统)中,打开终端窗口并输入以下命令:

    $ mysql -h [sourceServer] -u [yourUser] -p[yourPassword] dbSource -e"select ..." | sed 's/\t/,/g' > yourDestinationFile.csv
    
  2. 将文件复制到目标服务器

  3. 启动 MySQL 控制台,并使用 `load data ...`

笔记

  1. 语句中的字段必须与部分select字段列表中指定的字段顺序相同insert
  2. | sed 's/\t/,/g'部分将 mysql 查询的输出转换为 .csv 文件。您可以使用另一个分隔符代替,. 有关sed检查http://lowfatlinux.com/linux-sed.html的进一步参考
  3. 目标文件将具有行标题,因此您在导入数据时需要忽略它们。只需在句ignore 1 lines末添加即可。load data...

将数据从一个数据库复制到另一个数据库是一项非常简单的任务。希望这能为您指明正确的方向。

一个忠告:下载你的 MySQL 版本的参考手册并随身携带。您可以在那里找到大部分解决方案。

于 2013-04-02T17:38:32.117 回答
1

一个简单的方法是使用以下语法:

INSERT INTO Database.Table(field 1, field 2,...)
SELECT * FROM Database2.Table2;
于 2015-10-11T21:42:28.227 回答
0

谨防!!!

INSERT INTO dbname.tablename(fields...);
SELECT * FROM olddatabase.oldtable;

只有在 id 跟随时才会起作用。

选择省略 ID 的字段,以便自动增量可以为导入的行提供新的 ID。

于 2020-04-11T12:45:04.617 回答
0

用这个:

INSERT INTO dbname.tablename(fields...);
SELECT * FROM olddatabase.oldtable;
于 2018-05-21T13:22:02.123 回答