首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL从一个数据库迁移到另一个数据库

MySQL从一个数据库迁移到另一个数据库
EN

Stack Overflow用户
提问于 2017-06-25 19:26:28
回答 3查看 33关注 0票数 0

这就是我所拥有的:

代码语言:javascript
运行
复制
1 MySQL db with 2 schemas

 - schema 1
 - schema 2

它们都有一个名为files的表,

代码语言:javascript
运行
复制
 with 3 fields

 - Name
 - Play
 - Date

这两个模式都具有名称filed populatedschema 1 has Play and Date populated..

我希望将所有记录或播放和日期导入到名称与方案1相同的方案2中。

所以

代码语言:javascript
运行
复制
Schema 1

 - Name = A
 - Play = 1
 - Date = 25/06/17

Schema 2

 - Name = A
 - Play =
 - Date =

我希望将Play和Date插入到模式2中,其中名称与两个数据库中的名称匹配。

我有个疑问-

代码语言:javascript
运行
复制
INSERT INTO schema2.test (Play, Date) 
SELECT Play, Date FROM schema1.test;

我算不出where从句。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-25 19:38:00

看起来您想从一个表更新另一个表:

代码语言:javascript
运行
复制
update schema2.files f2 join
       schema1.files f1
       on f2.name = f1.name
    set f2.play = f1.play,
        f2.date = f1.date;

为了提高性能,您需要在schema1.files(name)上建立索引。。。或者更好的是,schema1.files(name, play, date)

这里假设name在两个表中是唯一的--标识每一行。如果这不是真的,我会建议一种非常不同的方法。将名称存储在单独的表中,然后截断schema2.files并将新记录插入:

代码语言:javascript
运行
复制
create table schema2.temp_names as
    select distinct name
    from schema2.files;

truncate table schema2.files;

insert into schema2.files(name, play, date)
    select f1.name, f1.play, f1.date
    from schema1.files f1
    where f1.name in (select n.name from schema2.temp_names n);

drop table schema2.temp_names;  -- if you want

实际上,如果您的表很大,这种方法通常会有更好的性能。

票数 0
EN

Stack Overflow用户

发布于 2017-06-25 19:36:38

代码语言:javascript
运行
复制
UPDATE 
schema2.test T2
INNER JOIN schema1.test T1 ON T1.Name=T2.Name
Set T2.Play=T1.Play,T2.Date=T1.Date

在这里,您不需要在模式2中插入记录,因为已经有名为列的记录。

因此,您必须使用Schema1特定记录来更新记录,而不是插入

试一试上面的代码。希望这能对你有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-06-25 19:39:20

您可以使用更新

代码语言:javascript
运行
复制
update database2.files t_dest
inner join database1.files t_orig on t.dest.name = t_orig.name
set t_dest.play  = t_orig.play,
    t_dest.date = t_orig.date

和插入select

代码语言:javascript
运行
复制
insert into database2.files ( Name, Play, Date)
select  Name, Play, Date
from database1.files 
inner join database2.files 
where database1.name <>  database2.name
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44745882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档