В настоящее время у меня есть таблица MySQL, которая отформатирована как таковая -
То, что я хотел бы сделать, это переместить эти данные в новую таблицу, но вместо того, чтобы иметь VARCHAR для данных детали, местоположения и клиента, я хотел бы присвоить каждому из них автоинкрементный идентификатор на основе значения. Например, часть "DEF" будет иметь идентификатор 1, а часть "GHI" будет иметь идентификатор 2. Это будет выглядеть таблица:
Есть ли SQL-запрос для этого?
Вы хотите, чтобы значения в столбцах part
и loc
были автоматически увеличивающимися целыми числами, или у вас есть таблицы типов для part
и loc
соответственно с автоматически увеличивающимися целыми числами?
Создайте новую таблицу с другим именем, отличным от старого. Вставьте записи в новую таблицу из старых значений отображения таблицы в целые числа.
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
Ниже приведен пример таблицы типов для части:
Если у вас есть таблица типов для 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
Насколько я знаю, нет возможности использовать функцию автоматического увеличения, чтобы напрямую генерировать значения для описанной таблицы.
Хорошая практика - создавать новые таблицы и заполнять их, а не пытаться изменить существующий (особенно, если ваше приложение активно и вы имеете дело с данными клиента).
Я предлагаю вам создать новую схему следующим образом:
Вы можете заполнить все новые таблицы с помощью существующей таблицы и назначить все первичные ключи для автоматического увеличения.
Это помогает вам масштабировать приложение и поддерживать его легко.