使用MySql Workbench的导入/导出来复制表

时间:2014-03-07 23:04:33

标签: mysql mysql-workbench

我的目标是: * 使用相同内容相同数据库中复制表格 *,但是使用不同的表名。如果我的表名是device,那么我想在同一个数据库中创建另一个表名为device_test的表。为此,我尝试了以下步骤:

在“服务器”菜单中:

1.  Data Export / Restore > Data Export
2.  Select the tables you want to export.
3.  Select "Export to Self-Contained File"
4.  Browse to the location for the SQL file.
5.  Start Export

现在,它是我桌面上的.sql文件形式。现在,如果我使用以下步骤将其导入同一个表:

1.  Data Export / Restore > Data Import/Restore
2.  Import from Self-Contained File
3.  Browse to the location for the SQL file.
4.  Start Import

如果我这样做,是否会覆盖旧表(device)?如果是这样,我应该在哪里指定新的表名(device_test)?

我正在使用MySQL Workbench,我不想覆盖原始表。

2 个答案:

答案 0 :(得分:1)

你有正确的步骤,但你错过了一个。你有:

  • 导出文件(您在问题中正确描述)
  • 导入文件(您也正确描述)

你应该:

  • 导出文件
  • 修改文件
  • 导入文件

导出表后,您将拥有.sql文件。您可以进入此文件并进行修改。 (您可以在任何基本文本编辑器中打开此文件。如果您在Windows上,可以通过右键单击文件图标并选择编辑在记事本中打开它。)在一些初始注释后,您应该有像

这样的东西
DROP TABLE IF EXISTS `device`;    
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `device` ( 
 -- parameters, etc.
)

注意它是如何丢弃你的表,然后重新创建它?这很简单 - 在表名所在的两个地方,将其更改为 new 表名。

DROP TABLE IF EXISTS `device_test`;  -- note the new name
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `device_test` (  -- note the new name
 -- parameters, etc.
)

文件中还有另外两个地方需要这样做。一个是LOCK TABLES语句,另一个是INSERT INTO语句。 (如果您愿意,您只需使用Find \ Replace工具将旧表名的所有实例替换为新名称。)

然后你可以导入它,你就完全了!

编辑:正如问题评论中提到的Zak,执行此操作的一种方法是使用CREATE TABLE new_table LIKE old_table; SELECT INTO new_table SELECT * FROM old_table;。如果有问题的两个表位于同一台机器上,则两种方法都可以使用。但是,转储.sql文件确实具有无法使用SQL语句模仿的可移植性。

答案 1 :(得分:1)

简单的解决方案:

CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table SELECT * FROM old_table;

甚至更短:

CREATE TABLE new_table SELECT * FROM old_table;