使用新架构将mysql数据迁移到多个表

时间:2018-02-22 07:40:51

标签: mysql database-migration

过去我在下面创建了不吉利的mysql架构并在某些时候清理它......这是最糟糕的部分:

|ID|ParentID |listing1|image1|comment1|listing2|image2|comment2|listing3|image3|comment3
|1 |50       |abc     |img1  |abc     |xyz     |img2  |xyz     |qwe     |img3  |qwe
|2 |51       |abd     |img1  |abd     |vyz     |img2  |vyz     |qwz     |img3  |qwz
|3 |52       |rtz     |img1  |rtz     |ghj     |img2  |ghj     |bnm     |img3  |bnm

现在我为旧数据创建了新结构:

表1(清单):

|ID|ParentID|listing|comment
|1 | 50     |abc    |abc 
|2 | 50     |xyz    |xyz
|3 | 50     |qwe    |qwe
|4 | 51     |adb    |adb

表2(媒体):

|ID|ParentID|image
|1 | 50     |img1   
|2 | 50     |img2   
|3 | 50     |img3   
|4 | 51     |img1    

我的问题是如何在新架构中获取旧值。我的第一个想法是编写一个php foreach来获取值,存储它们并再次插入它们但是如何...或者我可以直接在mysql中执行它吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用自动增量创建正确的table1和table2

create table1 (
  id int(11) not null autoincrement primary key,
  parentID int(11) not null ,
  listing varchar(255),
  comment varchar(255)
)
;
create table2 (
  id int(11) not null autoincrement primary key,
  parentID int(11) not null ,
  image varchar(255)
)
;

然后根据Union

进行一些插入选择
insert into table1 (parentID, listing, comment)
select parentID, listing1, comment1
from old_table
union 
select parentID, listing2, comment2
from old_table
union 
select parentID, listing3, comment3
from old_table
;




insert into tabl2 (parentID, image)

select parentID, image1
from old_table
union 
select parentID, image2
from old_table
union 
select parentID, image3
from old_table