我有几个大型 mysqldump 文件,需要导入到桌面 mysql 服务器上的 mysql。每个转储文件只有 1 个包含多个列的表。我想选择性导入 2 列,因为不需要其他列。
目前,我一直在使用下面所述的命令导入转储,但这会导入包含所有列的表。但我只想导入选择性列。
创建数据库DatabaseName;
CONNECT 数据库名称
显示表格;
源 D:/数据库名称
请建议。
您可以通过三种方式来解决此问题:
最简单、最快的方法是首先导入完整转储,然后删除不需要的列:
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)如果要删除的列非常大,您可以使用它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)
如果您有权访问进行转储的数据库,则可以在转储之前从临时表中删除该列:
# 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)