我遇到一个简单的问题(我认为)。
灾难发生前,我正在转储MySQL数据库。
我只需要从此转储导入和替换单个表中的三列(超过5000行,因此这就是我知道手动执行此操作的原因)。
我该怎么做,并且不破坏正在运行的数据库中的任何其他内容?
我只是想在导入和替换(我认为是UPDATE命令)过程中可以跳过仅我需要的那些列。
感谢您的帮助:(
------------更新---------------
好的,我使用PHPMyAdmin,首先我使用SELECT查询从整个表中仅获取三列。然后我将其转储,并且我有一个SQL文件,其中的转储仅包含三列。
现在,有了这个转储,我(我不知道如何命名)可以在这个典型的MySQL转储文件中进行编辑或更改,以便可以用替换所有现有值的方式导入这三列吗?
我的意思是-要使现有列为空,然后在整个表中使用“ INSERT INTO”?
它只有2600多行,我无法手动更改,因此最好使用自动化。
答案 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选项将其添加到每个插入行的末尾(假设您导出/转储了单个插入命令)。