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

Mic*_*ter 5 mysql

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

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

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

谢谢!

Bil*_*win 14

  1. 创建新表Authors.

    CREATE TABLE Authors (
      author_id INT AUTO_INCREMENT PRIMARY KEY,
      author_name VARCHAR(20)
    );
    
    Run Code Online (Sandbox Code Playgroud)
  2. 填充Authors一组不同的作者Posts.

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

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

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

    ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
    
    Run Code Online (Sandbox Code Playgroud)