如何将表的某些列移动到新表并将ID保存回原始表

时间:2017-08-04 20:15:19

标签: mysql sql

在MySQL数据库中,我有一个包含4列的“places”表:

id | street | city | name

我希望更改表格,使其成为:

表格地址:

id | street | city

放置表格:

id | address_id | name

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

最好的方法是什么,最好放在一个脚本中,以便我可以反复为localhost,dev和prod env做这个?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

看起来您需要的是VIEW和新的type UserValidator = Validator ([GeneralError], UserError [FieldError]) validateEmail :: UserInput -> UserValidator Email validateEmail i = Validator v where v e | '@' `elem` toString e = pure e | otherwise = Validation $ Left ([], UserTemplate [] [] [FieldError "missing @"]) validateName :: UserInput -> UserValidator Name validateName = ... validateAge :: UserInput -> UserValidator Age validateAge = ... userValidator :: UserInput -> UserValidator User userValidator input = validate $ UserTemplate { name = validateName input, age = validateAge input, email = validateEmail input } 表格。如果您不熟悉该概念,则视图是一个虚拟表,它是从真实表生成并不断更新的,因此您不必重新创建任何表。所以:

places

我将假设您不只是想在新的CREATE VIEW addresses AS SELECT id as address_id, street, city FROM places; 中使用原始ID两次,因此请使用places id字段创建新表,其他列则为想要,然后你可以在需要时运行插入:

AUTO_INCREMENT