MySQL从一个DB迁移到另一个DB

时间:2017-06-25 11:26:28

标签: mysql database

这就是我所拥有的:

1 MySQL db with 2 schemas

 - schema 1
 - schema 2

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

 with 3 fields

 - Name
 - Play
 - Date

这两个架构的名称都为filed populatedschema 1 has Play and Date populated ..

我想将所有记录或Play和Date导入到架构2中,其中Name与架构1相同。

所以

Schema 1

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

Schema 2

 - Name = A
 - Play =
 - Date =

我想将Play和Date插入到架构2中,其中Name在两个数据库中匹配..

我有这个查询 -

INSERT INTO schema2.test (Play, Date) 
SELECT Play, Date FROM schema1.test;

我无法解决where子句。

3 个答案:

答案 0 :(得分:0)

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

的特定记录更新该记录,而不是插入

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

答案 1 :(得分:0)

您似乎想要从另一个表更新一个表:

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并将新记录插入:

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

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

答案 2 :(得分:0)

您可以使用更新

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

和插入选择

insert into database2.files ( Name, Play, Date)
select  Name, Play, Date
from database1.files 
inner join database2.files 
where database1.name <>  database2.name