为mysql值生成id键

wf82jlnq  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(358)

我目前有一个mysql表的格式如下-

我想做的是将这些数据移到一个新表中,但是我不想让varchar用于part、location和customer数据,而是根据值为它们分配自动递增的id。例如,“def”部分的id为1,“ghi”部分的id为2。这就是table的样子-

是否有sql查询来执行此操作?

dced5bon

dced5bon1#

您需要 part 以及 loc 列是自动递增的整数,或者有类型表 part 以及 loc 分别使用自动递增的整数?

选项1:

使用与旧表不同的名称创建新表。将旧表中的值Map为整数的条目插入到新表中。

INSERT INTO new_table_name (part, loc, quan, date, customer)
SELECT CASE
WHEN part = 'DEF' THEN 1
WHEN part = 'GHI' THEN 2
END
, CASE
WHEN loc = '...' THEN 1
WHEN loc = '...' THEN 2
WHEN loc = '...' THEN 3
END
, quan
, date
, customer
FROM original_table

选项2:

以下是零件的示例类型表:

如果你有一个类型表 part 以及 loc ,你可以这样做。。。

SELECT part.id
     , loc.id
     , quan
     , date
     , customer
  FROM original_table orig INNER JOIN part prt
        ON orig.part  = prt.value
       INNER JOIN loc
        ON orig.loc = loc.value

据我所知,没有办法使用自动递增特性直接为您描述的表生成值。

6qfn3psc

6qfn3psc2#

创建新表并填充它,而不是试图更改现有的表,这是一种很好的做法(特别是,如果您的应用程序处于活动状态并且您正在处理客户数据)。
我建议您创建一个新的模式,如下所示:
架构图
可以使用现有表填充所有新表,并将所有主键分配给自动递增。
这有助于扩展应用程序并轻松维护它。

相关问题