2017-08-04 51 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

相關問題