仅将MySQL转储文件中的选定列插入数据库

时间:2018-08-13 06:30:36

标签: mysql dump

我遇到一个简单的问题(我认为)。

灾难发生前,我正在转储MySQL数据库。

我只需要从此转储导入和替换单个表中的三列(超过5000行,因此这就是我知道手动执行此操作的原因)。

我该怎么做,并且不破坏正在运行的数据库中的任何其他内容?

我只是想在导入和替换(我认为是UPDATE命令)过程中可以跳过仅我需要的那些列。

感谢您的帮助:(

------------更新---------------

好的,我使用PHPMyAdmin,首先我使用SELECT查询从整个表中仅获取三列。然后我将其转储,并且我有一个SQL文件,其中的转储仅包含三列。

现在,有了这个转储,我(我不知道如何命名)可以在这个典型的MySQL转储文件中进行编辑或更改,以便可以用替换所有现有值的方式导入这三列吗?

我的意思是-要使现有列为空,然后在整个表中使用“ INSERT INTO”?

它只有2600多行,我无法手动更改,因此最好使用自动化。

1 个答案:

答案 0 :(得分:0)

据我所知,这是不可能的。您可以尝试使用sed来仅提取所需的表-但是,即使不是没有可能,特别是3列也会很复杂。

Can I restore a single table from a full mysql mysqldump file?

最好的方法将是@Ali所说的,然后将其导入到临时数据库中,然后将所需的数据/列导出到新的转储中。 将数据库恢复到临时数据库,然后:

mysql> CREATE TABLE `tempTable` AS SELECT `columnYouWant` from `table`;
$> mysqldump yourDB tempTable > temp.sql

//由于您更新了问题:

您可能想在REPLACE INTO选项的转储中使用--replace-尽管这将删除并替换行,而不仅仅是单个列。如果只想只是各列,我想到的唯一方法就是使用UDPATE。要使用UPDATE,您可以选择以下选项:

多表更新

UPDATE mydb.mytable AS dest JOIN tempdb.mytable AS origin USING (prim_key)
SET dest.col1 = origin.col1,
dest.col2 = origin.col2,
...

然后删除临时数据库。

搜索/替换转储

进行转储,并使用INSERT ... ON DUPLICATE KEY UPDATE选项将其添加到每个插入行的末尾(假设您导出/转储了单个插入命令)。