从枚举更改为链接表



我们要把一个enum改成一个链接表的id

我们该怎么做呢?

当前枚举名称:strat
我们的新链接名称:stratid

我想的是这样的:

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

我已经没有创建链接表,现在它是所有的理论。

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

除了您

需要想要三重确保您的link_table.id s严格按照table_name.strat选项定义的顺序填充之外,没有进行更新的陷阱。

例如,如果stratenum('FOO', 'BAR'),那么在linked_table中,id == 1的记录应该是"FOO"记录。

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

是,先创建链接表,
将策略名设置为唯一的,
使用一个自动递增ID

insert link_table:

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

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

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

如果你看enum…

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。
但我想这是一次性的工作,就这样吧!

相关内容

  • 没有找到相关文章

最新更新