我的目标是: * 使用相同内容在相同数据库中复制表格 *,但是使用不同的表名。如果我的表名是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,我不想覆盖原始表。
答案 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;