生成MySQL值的ID密钥

时间:2018-07-24 18:49:55

标签: mysql sql amazon-web-services mysql-workbench amazon-rds

我目前有一个这样格式化的MySQL表-

enter image description here

我想做的是将这些数据移动到新表中,但是我不想根据零件,位置和客户数据使用VARCHAR,而是根据值分配每个ID的自动递增。例如,部分“ DEF”的ID为1,部分“ GHI”的ID为2。这就是表格的样子-

enter image description here

是否有SQL查询可以做到这一点?

2 个答案:

答案 0 :(得分:3)

您希望partloc列中的值是自动递增的整数,或者您分别为partloc使用自动递增的类型表整数?

选项1:

使用与旧表不同的名称创建新表。您可以将条目从旧表映射值插入到新表中,然后映射到整数。

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:

以下是零件的样本类型表:

enter image description here

如果您有partloc的类型表,则可以执行以下操作...

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

据我所知,无法使用自动递增功能直接为您描述的表生成值。

答案 1 :(得分:0)

创建新表并填充它是一个好习惯,而不是尝试更改现有表(特别是如果您的应用程序是活动的并且您正在处理客户数据)。

我建议您创建一个新的架构,如下所示:

Schema Diagram

您可以使用现有表填充所有新表,并将所有主键分配给自动增量。

这有助于您扩展应用程序并轻松维护它。