我正在做一些数据库方面的事情,我需要将一个表从一个模型复制到另一个模型,但我尝试了很多方法都没有效果。有没有办法做到这一点?
10 回答
如果你只想通过 MySQL Workbench 做一个表。
在 MySQL 工作台中:
- 连接到 MySQL 服务器
- 扩展数据库
- 右键单击一个表
- 选择复制到剪贴板
- 选择创建语句
该表的创建语句将被复制到您的剪贴板,如下所示:
CREATE TABLE `cache` (
`cid` varchar(255) NOT NULL DEFAULT '',
`data` longblob,
`expire` int(11) NOT NULL DEFAULT '0',
`created` int(11) NOT NULL DEFAULT '0',
`headers` text,
`serialized` smallint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`cid`),
KEY `expire` (`expire`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
在新数据库中创建表
- 为执行查询打开一个新的 SQL 选项卡(文件->新建查询选项卡)
更改创建表代码以包含要在其上创建表的数据库。
CREATE TABLE `databaseName`.`cache` ( `cid` varchar(255) NOT NULL DEFAULT '', `data` longblob, `expire` int(11) NOT NULL DEFAULT '0', `created` int(11) NOT NULL DEFAULT '0', `headers` text, `serialized` smallint(6) NOT NULL DEFAULT '0', PRIMARY KEY (`cid`), KEY `expire` (`expire`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
然后单击执行按钮(看起来像闪电)
这将使用 MySQL 工作台将表模式从一个数据库复制到另一个数据库。只需刷新数据库中的表,您应该会看到新添加的表
您最好的选择可能是创建模型的精简版本,其中包含您要继承的对象。然后打开目标模型并运行File -> Include Model...
。选择精简的源模型,然后就可以了。
- 选择带有源数据库的选项卡
- 在菜单中:服务器->数据导出
- 选择架构和表作为架构对象
- 选择选项导出到独立文件并选中在单个事务中创建转储(仅独立)
- 将完整文件路径复制到剪贴板
- 开始导出
- 选择带有目标数据库的选项卡
- 在菜单中:服务器->数据导入。确保您的目标数据库名称位于数据导入视图的左上角
- 选择从自包含文件导入并从剪贴板粘贴完整文件路径
- 选择默认目标架构
- 选择转储内容(转储结构和数据等...)
- 开始导入
您可以只使用 select 语句。在这里,我正在创建从“original_schema”模式/数据库到“new_schema”模式的“original_table”表的副本:
CREATE TABLE new_schema.duplicate_table AS
Select * from original_schema.original_table;
您可以放置任何您需要的选择语句,添加条件并选择列:
CREATE TABLE new_schema.duplicate_table AS
SELECT column1, column2
FROM original_schema.original_table
WHERE column2 < 11000000;
我认为值得一提的是
- 复制的表可能会引用原始模式的表中的字段,这些字段在要复制的模式中不存在。在将表添加到其他模式之前,检查表是否存在这些差异可能是一个好主意。
- 检查引擎兼容性(例如 InnoDB 与 MyISAM)和字符集可能是个好主意。
如果您已经创建了表并且只想复制数据,我建议您使用“导出数据向导”和“导入数据向导”。它基本上是在程序中选择东西进行导出然后导入数据,并且易于使用。
MySQL 在这里有一篇关于向导的文章:表数据导出和导入向导
要使用向导复制数据,请执行以下操作:
- 在列表中找到要从中复制数据的表。
- 右键单击并选择“表数据导出向导”。
- 选择要复制的列。
选择一个位置以保存带有复制数据的 *.csv 或 *.json 文件。
找到要将复制的数据插入到的表。
- 右键单击并选择“表数据导入向导”。
- 选择刚刚导出的文件。
- 将您复制的表中的列映射到您插入的表。
- 按“完成”。数据按照您的选择插入。
第 1 步:右击表格 > 复制到剪贴板 > 创建语句
第二步:将剪贴板粘贴到工作台的查询字段中。
第 3 步:从表的名称和模型(模式)的名称中删除 (``),后跟一个点。
例如:`cusine_menus` -> schema_name.cusine_menus
执行
像 .m_property_nature 一样创建表 .m_property_nature;
插入到 .m_property_nature 选择 * 从 .m_property_nature;
您可以从表信息中获取 crate 表查询,并在不同的数据库实例上使用相同的查询。
- 显示创建表 TABLENAME.content 并复制查询;
- 在连接的另一个数据库实例上运行生成的查询。
在这篇文章中,我们将向您展示如何在 MySQL 中复制表
首先,此查询将复制数据和结构,但不包括索引:
CREATE TABLE new_table SELECT * FROM old_table;
其次,此查询将复制表结构和索引,但不复制数据:
CREATE TABLE new_table LIKE old_table;
因此,要复制所有内容,包括索引、主键约束、外键约束、触发器等数据库对象,请运行以下查询:
CREATE TABLE new_table LIKE old_table;
INSERT new_table SELECT * FROM old_table;
如果要将表从一个数据库复制到另一个数据库:
CREATE TABLE destination_db.new_table LIKE source_db.old_table;
INSERT destination_db.new_table
SELECT
*
FROM
source_db.old_table;