将MySQL列从VARCHAR迁移到另一个表

时间:2018-01-28 01:34:10

标签: mysql foreign-keys

我有一些巨大的(在1个表中有数百万行)遗留表有几列我应该肯定设置为创建它们时的外键,但没有时间机器,我必须迁移它们。

这些专栏中的内容就像是其他内容的简短“关键”。其中一个新表的一个真实例子是:

+----+-----+---------+
| id | key |  name   |
+----+-----+---------+
|  1 | bf  | BetFair |
|  2 | bd  | BetDaq  |
+----+-----+---------+

当前表中的当前行有类似的内容,

. (bet_id=1234, odds=2.1, source='bf') (bet_id=1235, odds=2.15, source='bd') .

我希望最终的结果是什么,

. (bet_id=1234, odds=2.1, source_id=1) (bet_id=1235, odds=2.15, source_id=2) .

我知道如何在多个步骤中执行此操作,创建新表,使用GROUP BY / DISTINCT将源表中的所有数据添加到新表中,并最终设置新的外键带有命令的id列,

UPDATE BetsTable SET source_id=1 WHERE source='bf'

我只是想知道是否有更多的“一次性”,高效的SQL命令来一步更新整个表,而不是多个。

1 个答案:

答案 0 :(得分:0)

如果您只想更改数据,请尝试以下操作:

UPDATE BetsTable b
JOIN NewTable n ON n.key = b.source
SET b.source = n.id

如果您真的需要将source列设为外键,则需要先更改它的数据类型。但在这种情况下,我非常确定重建表格会更有效。