#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
.