2017-08-04 19 views
0

在MySQL数据库中,我有4个列的表“地方”:如何将一个表中的某些列移动到一个新表并保存IDS回原来的表

id | street | city | name 

,我会要改变表,使之成为:

表地址:

id | street | city 

地方表:

id | address_id | name 

显然,address_id是fk到地址表的id。

最好能放在脚本中的最佳方法是什么,以便我可以反复为localhost,dev和prod env执行此操作?

+0

MYSQL或SQL-server? – Jens

+0

这里的父母表是哪个表?地址或地点?我想你会在新的子表上创建一个自动数字列? –

+0

您目前的“Places”表中是否已有数据?如果你这样做,你需要迁移它,因为你会丢掉两列并将它们移动到另一个表。 – Dido

回答

0
-- create table addresses with the required columns size and indexes 
-- if you have any existing data, insert it in the new table 
INSERT INTO Addresses 
SELECT Street, City FROM Places 

-- if you have any constraints on those columns, remove them 
ALTER TABLE Places DROP Street, City 
ALTER TABLE PLACES ADD Address_Id int 
-- add foreign key constraint 
+0

从地址到地址的引用缺失 – Serg

0

它看起来像你需要的是一个VIEW和新places表。如果你不熟悉这个概念,那么一个视图就是一个虚拟表,它是从真实表中生成并不断更新的,所以你不必重新创建任何表。所以:

CREATE VIEW addresses AS 
    SELECT id as address_id, street, city 
    FROM places; 

我会假设你不只是希望在新places原来的两倍ID,所以与AUTO_INCREMENT id字段,并且希望其他列创建新表,然后您可以在需要时运行插入:

INSERT INTO places_new 
    (address_id, name) 
SELECT 
    a.address_id, p.name 
FROM places AS p 
INNER JOIN addresses as a 
on p.id = a.address_id 
+0

该视图可能会为同一个“街道,城市”重复行。我猜OP只需要唯一的。 – Serg

相关问题