我的项目正在增长,需要从一个表扩展到两个.
我有帖子,每个帖子都有一个作者.目前作者只是帖子中的一个专栏,但我创建了一个名为authors的新表.我想用所有唯一的作者实例填充新表,并用新的作者ID替换posts表中的作者值.
是否有一些sql魔法可以帮助我做到这一点?我的帖子表是30k条目,所以我想避免手动操作;)
谢谢!
Bil*_*win 14
创建新表Authors.
CREATE TABLE Authors (
author_id INT AUTO_INCREMENT PRIMARY KEY,
author_name VARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud)填充Authors一组不同的作者Posts.
INSERT INTO Authors (author_name)
SELECT DISTINCT author_name FROM Posts;
Run Code Online (Sandbox Code Playgroud)将一个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)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)从Posts中删除现在冗余的author_name,并可选择使author_id不可为空.
ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
Run Code Online (Sandbox Code Playgroud)