Первичный ключ с разным значением в зависимости от вставки

#mysql #auto-increment #prefix

#mysql #автоматическое увеличение #префикс

Вопрос:

у меня есть такая таблица

 create table tower (
    d_tower int(10) not null auto_increment primary key, 
    name varchar (20) not null
)
 

и когда я вставляю что-то вроде Tower, в качестве первичного ключа используется T001, или когда я вставляю Radio, в качестве первичного ключа используется R001. что я должен для этого сделать?

Комментарии:

1. Вы не можете сделать это с помощью первичного ключа, который есть auto_increment .

2. AUTO_INCREMENT должно быть целым числом, а не строкой.

3. Вы можете использовать сгенерированный столбец, выражение которого CONCAT(LEFT(name, 1), LPAD(d_tower, 10, '0'))

4. к сожалению, мне кажется, что мне нужно изменить тип первичного ключа на int, и когда я это сделаю, каковы следующие шаги для выполнения того, что указано выше?

5. Автоматически добавляемый столбец должен иметь числовой тип данных и должен быть первичным ключом. Необходимый вам первичный ключ должен иметь строковый тип данных — поэтому автоинкремент не применим для вашей задачи. Итак, вам нужно сгенерировать числовую часть вашего первичного ключа с помощью кода. Теоретически это может быть выполнено в триггере, но это проблематично, когда возможны параллельные вставки. Я бы рекомендовал создать хранимую процедуру, которая получает данные для вставки и генерирует значение для столбца первичного ключа. PS. Существует альтернатива — но только тогда, когда таблица определена как ENGINE=MyISAM .