如何基于Mysql中的现有表创建索引表

时间:2013-04-12 09:13:23

标签: mysql

我有一个包含以下列的列:

time   tv_program        user_name
xxx    friends           John
xxx    Game of Thrones   Kate
... 
...

现在我想为tv_program和user_name创建单独的索引表,如:

id tv_program
1  friends
2  Game of Thrones
3  ...
4  ...

id user_name
1  John
2  Kate
3  ...
4  ...

并更新原始表,将tv_program和user_name替换为索引号,而不是

time    tv_program   user_name
xxx     1            1
xxx     2            2
...     ...          ...

有没有简单的方法可以做到这一点?非常感谢!!

1 个答案:

答案 0 :(得分:1)

您基本上想要规范化数据,并且可以使用MySQL查询来执行此操作:

使用tv_programs自动增量创建一个表id表,name索引唯一

  

INSERT INTO tv_programs(name)SELECT DISTINCT tv_program   来自original_table

现在你有一个包含程序的表,它们的id是由MySQL自动创建的,所以你现在必须运行带连接的UPDATE(使用字符串名称,如果你有大量数据,可能会很慢)索引,但你只需运行一次)并使用连接表的id更新原始表(tv_programs)

  

UPDATE original_table rt LEFT JOIN tv_programs tp ON ot.tv_program = tp.name SET ot.tv_program = tp.id

现在您可以将tv_program列的类型更改为INT

重复另一个表格。在之前进行备份,或者在原始表中添加一个列(例如tv_program_id)并使用ID更新该列,以便在删除旧列之前运行其他查询来检查结果并继续

希望这很清楚。