【问题标题】:Can I move a column from one mysql table to another, and replace the original column with the new id's form the new table?我可以将一列从一个 mysql 表移动到另一个表,并用新表的新 id 替换原始列吗?
【发布时间】:2013-01-02 05:37:38
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:
    1. 创建新表Authors

      CREATE TABLE Authors (
        author_id INT AUTO_INCREMENT PRIMARY KEY,
        author_name VARCHAR(20)
      );
      
    2. 用来自Posts 的不同作者集填充Authors

      INSERT INTO Authors (author_name) 
      SELECT DISTINCT author_name FROM Posts;
      
    3. 在 Posts 中添加 author_id 列,引用作者。

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

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

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

    【讨论】:

      【解决方案2】:

      我会遵循如下流程:

      1. 创建新表,table2
      2. table2_id 列添加到table1
      3. 通过从table1 中选择来填充(更新)table2,包括table1.id(但称它为table1_id,这样你仍然有自己的单独ID)和你想要的table1.column
      4. 使用来自table2 的ID(主键)更新table1.table2_id
      5. table2 删除列table1_id

      【讨论】:

      • 我实际上不想要表 2 中的 table1.id。我希望 table2.id 与 table1 中由匹配作者创建的任何帖子相关联
      • 它在最后被丢弃。
      猜你喜欢
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多