从枚举更改为链接表

时间:2011-12-15 15:54:32

标签: mysql enums linked-tables

我们将把我们拥有枚举的内容改为链接表的id。

我们将如何解决这个问题?

我们当前的枚举名称:strat
我们新的关联名称:stratid

我在想的是:

UPDATE table_name  
SET stratid = (SELECT id FROM link_table WHERE stratname = table_name.strat);

我已经创建了链接表,现在它完全是理论。

以上是否有效? 为了从枚举转移到链接表,有什么我应该改变的吗?

2 个答案:

答案 0 :(得分:0)

除了需要之外,没有任何进展更新要确保您的link_table.id严格按照table_name.strat选项的定义顺序填充。

例如,如果stratenum('FOO', 'BAR'),则linked_tableid == 1的记录应为“FOO”记录。

之后,您可能想要制作stratidNON NULL;这并不完全等同于你之前的安排,但它可能更接近你想要的。

答案 1 :(得分:0)

是的,首先创建链接表,
将stratname设置为唯一,
使用自动增量ID

插入link_table的惰性解决方案:

insert into link_table
select distinct strat from table_name order by strat;

但是,我不确定是否正在使用所有预定义的枚举。

另外,在不知道枚举的大小的情况下,
我建议你不要手动插入。

如果你看一下枚举......

enum('...', '...', ...)  <-- is just a comma separated value

所以,这是获取CSV的查询: -

select column_type from information_schema.columns 
where schema_name="table_name" and column_name = "strat";

您可以与编程语言结合使用link_table插入。

最后,你UPDATE查询不是很优化,你可以切换到使用INNER JOIN 但我认为这是一次性工作,所以就这样吧!