我的项目正在增长,需要从一个表扩展到两个。
我有帖子,每个帖子都有一个作者。目前作者只是帖子中的一列,但我创建了一个名为作者的新表。我想用作者的所有唯一实例填充新表,并用新的作者 ID 替换 posts 表中的作者值。
是否有一些 sql 魔法可以帮助我做到这一点?我的帖子表有 30k 个条目,所以我想避免手动操作;)
谢谢!
我的项目正在增长,需要从一个表扩展到两个。
我有帖子,每个帖子都有一个作者。目前作者只是帖子中的一列,但我创建了一个名为作者的新表。我想用作者的所有唯一实例填充新表,并用新的作者 ID 替换 posts 表中的作者值。
是否有一些 sql 魔法可以帮助我做到这一点?我的帖子表有 30k 个条目,所以我想避免手动操作;)
谢谢!
创建新表Authors
。
CREATE TABLE Authors (
author_id INT AUTO_INCREMENT PRIMARY KEY,
author_name VARCHAR(20)
);
填充Authors
来自 的不同作者集Posts
。
INSERT INTO Authors (author_name)
SELECT DISTINCT author_name FROM Posts;
在 Posts 中添加 author_id 列,该列引用作者。
ALTER TABLE Posts ADD COLUMN author_id INT,
ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);
Posts
根据基于每个表中的 author_name 的(低效)连接,使用相应的 author_id 值进行更新。MySQL 支持多表 UPDATE 语法,这不是标准的 SQL,但对于这些情况非常方便。
UPDATE Posts JOIN Authors USING (author_name)
SET Posts.author_id = Authors.author_id;
从 Posts 中删除现在冗余的 author_name,并可选择使 author_id 不可为空。
ALTER TABLE Posts DROP COLUMN author_name, MODIFY author_id INT NOT NULL;
我会遵循类似的过程:
table2
table2_id
到table1
table2
通过从中选择填充(更新)table1
,包括两者table1.id
(但调用它,table1_id
以便您仍然拥有自己的单独 id)和table1.column
您想要的table1.table2_id
使用来自的 ids(主键)更新table2
table1_id
删除列table2