如何在不选择列的情况下将 MySqlDump 文件导入 MySQL

vin*_*wal 3 mysql sql

我有几个大型 mysqldump 文件,需要导入到桌面 mysql 服务器上的 mysql。每个转储文件只有 1 个包含多个列的表。我想选择性导入 2 列,因为不需要其他列。

目前,我一直在使用下面所述的命令导入转储,但这会导入包含所有列的表。但我只想导入选择性列。


创建数据库DatabaseName;

CONNECT 数据库名称

显示表格;

源 D:/数据库名称


请建议。

Ste*_*ley 6

您可以通过三种方式来解决此问题:

  1. 最简单、最快的方法是首先导入完整转储,然后删除不需要的列:

    mysql -u username -p password database_name < file_name.sql
    mysql -u username -p password database_name -e'ALTER TABLE table_name DROP COLUMN column_name'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果要删除的列非常大,您可以使用它sed来抢先(快速)删除有问题的列。像这样的东西(正则表达式模式将根据表中的数据而变化):

    # First, remove the column name from the INSERT line
    sed -i "s/`column_name`,//g" file_name.sql
    
    # Then, remove the column value from the VALUES lines
    sed -i "s/(\([0-9]+,'[\w+]',[0-9]+,)'.*',([0-9]+\),/\1\2/g" file_name.sql
    
    # Then, you can import your dump, entirely stripped of that column
    mysql -u username -p password database_name < file_name.sql
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您有权访问进行转储的数据库,则可以在转储之前从临时表中删除该列:

    # First, create the temp table as a clone of your table, import the data
    mysql -u username -p password database_name -e 'CREATE TABLE table_name2 LIKE table_name; INSERT INTO table_name2 SELECT * FROM table_name; ALTER TABLE table_name2 DROP COLUMN column_name;'
    
    # Dump ONLY the temp table with the missing column
    mysqldump -u username -p password database_name table_name2 > dump_excluding_column.sql
    
    # Afterwards, delete the temporary table
    mysql -u username -p password database_name -e 'DROP TABLE table_name2;'
    
    Run Code Online (Sandbox Code Playgroud)

    执行导入时,您必须随后重命名表,例如:

    # Run the import
    mysql -u username -p password database_name < dump_excluding_column.sql
    
    # Afterwards, rename the table name to remove the "2" suffix
    mysql -u username -p password database_name -e 'RENAME TABLE table_name2 TO table_name;'
    
    Run Code Online (Sandbox Code Playgroud)