我可以将列从一个mysql表移动到另一个mysql表,并用新表的新表替换原始列吗?

时间:2012-11-29 20:16:19

标签: mysql

我的项目正在发展,需要从一个表扩展到两个。

我有帖子,每个帖子都有作者。目前作者只是帖子中的一个专栏,但我创建了一个名为authors的新表。我想用新作者的所有唯一实例填充新表,用新的作者ID替换posts表中的作者值。

是否有一些sql魔法可以帮助我做到这一点?我的帖子表是30k条目,所以我想避免手动操作;)

谢谢!

2 个答案:

答案 0 :(得分:13)

  1. 创建新表Authors

    CREATE TABLE Authors (
      author_id INT AUTO_INCREMENT PRIMARY KEY,
      author_name VARCHAR(20)
    );
    
  2. 使用Authors中的一组不同作者填充Posts

    INSERT INTO Authors (author_name) 
    SELECT DISTINCT author_name FROM Posts;
    
  3. 将一个author_id列添加到引用作者的帖子。

    ALTER TABLE Posts ADD COLUMN author_id INT, 
        ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
    
  4. 根据基于每个表中author_name的(低效)连接,使用相应的author_id值更新Posts。 MySQL支持多表UPDATE语法,这不是标准的SQL,但它对于这些情况非常方便。

    UPDATE Posts JOIN Authors USING (author_name)
    SET Posts.author_id = Authors.author_id;
    
  5. 从帖子中删除现在冗余的author_name,并可选择使author_id不可为空。

    ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
    

答案 1 :(得分:1)

我会遵循以下流程:

  1. 创建新表table2
  2. 将列table2_id添加到table1
  3. table2中选择填充(更新)table1,包括table1.id(但称之为table1_id,因此您仍拥有自己独立的ID)和{{ 1}}你想要
  4. 使用table1.column
  5. 中的ids(主键)更新table1.table2_id
  6. table2
  7. 中删除列table1_id