【问题标题】:Generate ID Keys for MySQL Values为 MySQL 值生成 ID 键
【发布时间】:2019-01-01 11:45:41
【问题描述】:

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

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

是否有执行此操作的 SQL 查询?

【问题讨论】:

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


    【解决方案1】:

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

    选项一:

    使用与旧表不同的名称创建新表。随时将条目从旧表映射值插入到新表中。

    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:

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

    如果您有 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
    

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

    【讨论】:

    • 在我看来,选项二会比 case 语句好很多,这样如果有一个新的添加说 ABC,你可以很容易地为其分配一个 id 3 而不是进入 case 语句并使查询更长
    【解决方案2】:

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

    我建议你创建一个新的模式如下:

    Schema Diagram

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      相关资源
      最近更新 更多