在MySQL數據庫中,我有4個列的表「地方」:如何將一個表中的某些列移動到一個新表並保存IDS回原來的表
id | street | city | name
,我會要改變表,使之成爲:
表地址:
id | street | city
地方表:
id | address_id | name
顯然,address_id是fk到地址表的id。
最好能放在腳本中的最佳方法是什麼,以便我可以反覆爲localhost,dev和prod env執行此操作?
在MySQL數據庫中,我有4個列的表「地方」:如何將一個表中的某些列移動到一個新表並保存IDS回原來的表
id | street | city | name
,我會要改變表,使之成爲:
表地址:
id | street | city
地方表:
id | address_id | name
顯然,address_id是fk到地址表的id。
最好能放在腳本中的最佳方法是什麼,以便我可以反覆爲localhost,dev和prod env執行此操作?
-- 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
從地址到地址的引用缺失 – Serg
它看起來像你需要的是一個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
該視圖可能會爲同一個「街道,城市」重複行。我猜OP只需要唯一的。 – Serg
MYSQL或SQL-server? – Jens
這裏的父母表是哪個表?地址或地點?我想你會在新的子表上創建一個自動數字列? –
您目前的「Places」表中是否已有數據?如果你這樣做,你需要遷移它,因爲你會丟掉兩列並將它們移動到另一個表。 – Dido