将一列移到另一张表&通过外部ID更新该列

时间:2017-10-05 15:42:06

标签: mysql sql database

我有一张大桌子,我需要修改结构。

这是表结构。

表名:“文章”

+---------+---------------+-------------------+--------------+
| id(int) | details(text) | category(varchar) | tag(varchar) |
+---------+---------------+-------------------+--------------+

要点:

  • 此表中有大约250k(250,000)行
  • 大约有10k个独特类别

我需要改变什么

我创建了一个名为“category”的表,然后将category列作为该表的外键。

这就是我的期望:

我需要将类别名称移到类别表中,然后需要更新带有类别ID的文章表。

表名:“文章”

+---------+---------------+-------------------+--------------+
| id(int) | details(text) | category(int)     | tag(varchar) |
+---------+---------------+-------------------+--------------+

表名:“类别”

+---------+-------------------+
| id(int) | category(varchar) |
+---------+-------------------+

是否可以只使用MySQL? (我知道如何使用一些PHP脚本和MySQL命令)。但我在这里问过它,因为如果我能用MySQL做到这一点我可以节省很多时间。

1 个答案:

答案 0 :(得分:1)

假设category(id)列自动填充(它是auto_increment列):

SET FOREIGN_KEY_CHECKS=0;

INSERT INTO Category( category )
SELECT DISTINCT category(varchar)
FROM Articles;

UPDATE Articles a, Category c
SET a.category(int) = c.id
WHERE a.category(varchar) = c.category
;

SET FOREIGN_KEY_CHECKS=1;

我使用category(varchar)category(int)来区分同一个表中的一个(int)category列与另一个(varchar)category。这当然在语法上是不正确的,您必须使用适当且不同的列名而不是category(xxx)