Я хочу, чтобы при вводе продукта в мою базу данных MYSQL он генерировал свой собственный идентификационный код следующим образом:
- P001 — Моющее средство
- P002 - Масло
- P003 - Рис
Мне предложили сделать это с помощью хранимой процедуры, но я не знаю как. Любая идея, как это сделать?
Как сказал вам Леандро, рекомендуется, чтобы код идентификатора таблицы представлял собой числовые данные, что вы могли бы сделать, так это дополнительное поле, которое работает как второй код, возможно, называемый code_secondary. Вы можете сделать это с помощью хранимой процедуры, я приведу небольшой пример:
При этом вы можете генерировать коды по мере необходимости со структурой «P001».
Решение, предложенное Кристофером на основе решения Леандо, неплохое. Несмотря на это, более чем a
store procedure
, это было бы сделано с помощью триггеров, таким образом, что перед вставкой нового продукта в вашу таблицу вычисляется это второе поле. Например, это будет триггер, который решит эту проблему:Объяснение кода по частям:
Объявлена переменная для извлечения из схемы следующего используемого идентификатора (поскольку он является автоинкрементным и триггер запускается до вставки, у нас нет значения для идентификатора
Поле устанавливается
codigo_secundario
как следующий идентификатор для вставки с заполнением (заполнением) нулями впереди, пока не будет завершена строка длины 8 вместе с префиксом с буквойP
. Длину 8 я взял так как позволяет иметь10^8-1
изделия в сумме. Если вы считаете, что у вас будет более 99 999 999 продуктов, увеличьте это значение или уменьшите его, если у вас будет намного меньше этого.Надеюсь, я помог.
Ваше здоровье
Идентификатор таблицы не предназначен для этого, идентификатор должен быть чем-то простым, порядковым номером или идентификатором.
Не рекомендуется использовать вычисляемое поле, так как оно не соответствует нормальным формам.
Нормализация базы данных
в вашем случае определите последовательное числовое поле, которое принимает значения 1,2,3 и т. д., а затем еще одно поле, представляющее букву P, я не мог бы сказать вам, какое имя дать этому полю, потому что это будет что-то, связанное с бизнесом
Когда вы показываете данные пользователю, вы можете составить значение, объединив буквенное поле с числовым последовательным
Вы можете использовать, если это php, str_pad
и так добавить нули перед кодом.
Я столкнулся с той же проблемой, я провел некоторое исследование, и они рекомендуют мне не использовать
information_schema
вместо этого более рекомендуется использоватьLAST_INSERT_ID()
иLimit 1
Курок: