我有几个大的mysqldump文件需要导入我的桌面mysql服务器上的mysql。每个转储文件只有1个表有多列。我想导入选择性2列,因为不需要其他列。 / p>
目前我一直在使用下面提到的命令导入转储,但这会导入包含所有列的表。但是我只想导入选择性列。
创建数据库DatabaseName;
CONNECT DatabaseName
显示表格;
来源D:/ DatabaseName
请建议。
答案 0 :(得分:2)
有三种方法可以解决这个问题:
最简单快捷的方法是首先导入完整转储,然后删除您不想要的列:
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'
如果您要删除的列非常大,则可以使用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
如果您有权访问数据库,则可以在转储之前从临时表中删除该列:
# 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 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;'
答案 1 :(得分:0)
如果您只需要必要的列转储:
1)创建临时db
2)进口转储
3)使用一些db gui或从控制台更改表并保留必要的列
4)备份结果数据库
如果您需要直接导入数据库只有N个列,那么:
1)进口转储
2)使用一些db gui或从控制台更改表并保留必要的列
sooooooo ......简单