2017-08-04 16 views
0

をIDを保存するために、私は4列のテーブル「場所」を持っている:どのように新しいテーブルにテーブルの一部の列を移動し、元のテーブルにMySQLデータベースで

id | street | city | name 

と私は考えそれはなるようにテーブルを変更したい:

テーブルアドレス:

id | street | city 

場所テーブル:

id | address_id | name 

そして明らかに、address_idはアドレステーブルのIDに対してfkです。

私は繰り返しlocalhost、devとprod envのためにそれを行うことができるように、スクリプトに入れることができる最良のアプローチは何ですか?

+0

MYSQLまたはSQLサーバーのいずれかに挿入することができます。 – Jens

+0

ここに親のテーブルはありますか?住所や場所?私は、あなたが新しい子テーブルに1つのオートナノカラムを作成すると思いますか? –

+0

現在の「プレイス」テーブルにデータがありますか?その場合は、2つの列を削除して別の表に移動するため、移行する必要があります。 – 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テーブルで必要なもののように見えます。この概念に精通していない場合、ビューは実際の表から生成され、常に更新される仮想表であるため、表を再作成する必要はありません。だから:

私はあなただけで二回新しい placesの元のIDを持って見ていないと仮定し、その AUTO_INCREMENT idフィールドとしたい他の列を使用して新しいテーブルを作成するつもりです
CREATE VIEW addresses AS 
    SELECT id as address_id, street, city 
    FROM places; 

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

関連する問題