在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