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

6ljaweal  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(326)

我有一个简单的问题。
我有一个mysql数据库转储前的灾难。
我只需要从这个转储中导入和替换单个表中的三列(在5000多行中,所以我知道要手动执行)。
我应该怎么做才能做到这一点,并且不破坏工作数据库中的任何其他内容?
我只是在想,有一个选项可以在导入期间跳过列,并只替换我需要的这些列(我认为是update命令)。
我会感谢你的帮助:(

mbskvtky

mbskvtky1#


好的,我使用phpmyadmin,首先使用selectquery从整个表中只得到三列。然后我转储了它,我有一个sql文件,其中转储只包含三列。
现在,有了这个转储文件,我可以(不知道如何命名)在这个典型的mysql转储文件中编辑或更改一些内容,以使导入这三列并替换所有现有值成为可能吗?
我的意思是-使现有列为空,然后使用“insert-into”,但对整个表?
这是刚刚超过2600行,我不能改变它手动,所以它会更好地使用自动化。

mw3dktmi

mw3dktmi2#

据我所知,这是不可能的。您可以尝试使用sed,以便只提取所需的表-但是如果不是不可能的话,那么具体来说3列将是复杂的。
我可以从一个完整的mysql mysqldump文件中恢复一个表吗?
最好的方法是像@ali所说的那样,将其导入tempdb,然后将所需的数据/列导出到一个新的转储。将数据库还原为临时数据库,然后:

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

//既然你更新了问题:
您可能希望将replace into与转储一起使用--replace选项,但这将删除行并替换它,而不仅仅是单个列。如果您只需要单独的列,我唯一能想到的方法就是使用udpate。要使用更新,您可以选择:
多表更新

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

然后删除临时数据库。
搜索/替换转储
拿着你的垃圾桶,用插入物。。。启用“复制键更新”选项,将其添加到每个插入行的末尾(假设导出/转储了单个插入命令)。

相关问题