Генерация идентификаторов ключей для значений MySQL

0

В настоящее время у меня есть таблица MySQL, которая отформатирована как таковая -

Изображение 174551

То, что я хотел бы сделать, это переместить эти данные в новую таблицу, но вместо того, чтобы иметь VARCHAR для данных детали, местоположения и клиента, я хотел бы присвоить каждому из них автоинкрементный идентификатор на основе значения. Например, часть "DEF" будет иметь идентификатор 1, а часть "GHI" будет иметь идентификатор 2. Это будет выглядеть таблица:

Изображение 174551

Есть ли SQL-запрос для этого?

Теги:
mysql-workbench
amazon-web-services
amazon-rds

2 ответа

3
Лучший ответ

Вы хотите, чтобы значения в столбцах part и loc были автоматически увеличивающимися целыми числами, или у вас есть таблицы типов для part и loc соответственно с автоматически увеличивающимися целыми числами?

Опция 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:

Ниже приведен пример таблицы типов для части:

Изображение 174551

Если у вас есть таблица типов для 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

Насколько я знаю, нет возможности использовать функцию автоматического увеличения, чтобы напрямую генерировать значения для описанной таблицы.

  • 1
    Второй вариант был бы намного лучше, чем операторы case, на мой взгляд, поэтому, если есть новое дополнение, например, ABC, вы можете легко присвоить ему идентификатор 3 вместо того, чтобы идти в оператор case и делать запрос длиннее.
0

Хорошая практика - создавать новые таблицы и заполнять их, а не пытаться изменить существующий (особенно, если ваше приложение активно и вы имеете дело с данными клиента).

Я предлагаю вам создать новую схему следующим образом:

Схема схемы

Вы можете заполнить все новые таблицы с помощью существующей таблицы и назначить все первичные ключи для автоматического увеличения.

Это помогает вам масштабировать приложение и поддерживать его легко.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню