我可以把一个列从一个mysql表移到另一个表,然后用新的id替换原来的列吗?

mzmfm0qo  于 2023-05-21  发布在  Mysql
关注(0)|答案(2)|浏览(159)

我的项目正在增长,需要从一个表扩展到两个表。
我有文章,每篇文章都有作者。目前,作者是帖子中的一列,但我已经创建了一个名为作者的新表。我想用所有唯一的authors示例填充新表**,并用新的author id替换posts表中的author值。
什么是SQL?
我的帖子表是30k条目。

bsxbgnwa

bsxbgnwa1#

1.创建新表Authors

CREATE TABLE Authors (
  author_id INT AUTO_INCREMENT PRIMARY KEY,
  author_name VARCHAR(20)
);

1.使用来自Posts的不同作者的集合填充Authors

INSERT INTO Authors (author_name) 
SELECT DISTINCT author_name FROM Posts;

1.在Posts中添加一个author_id列,它引用Authors。

ALTER TABLE Posts ADD COLUMN author_id INT, 
    ADD FOREIGN KEY (author_id) REFERENCES Authors(author_id);

1.使用相应的author_id值更新Posts,这是基于每个表中的author_name的(低效)连接。MySQL支持多表UPDATE语法,这不是标准的SQL,但它对这些情况非常方便。

UPDATE Posts JOIN Authors USING (author_name)
SET Posts.author_id = Authors.author_id;

1.从Posts中删除现在多余的author_name,并可选地使author_id不可为空。

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

qacovj5a2#

我会遵循这样一个过程:
1.创建新表table2
1.将列table2_id添加到table1
1.通过从table1中进行选择来填充(更新)table2,包括table1.id(但称之为table1_id,这样您仍然有自己的单独ID)和您想要的table1.column
1.使用table2中的id(主键)更新table1.table2_id
1.从table2删除列table1_id

相关问题