Автоинкремент идентификатора таблицы с использованием комбинации строк в базе данных автоматически - PullRequest
7 голосов
/ 14 июля 2010

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

Первый идентификатор моей таблицы должен быть первичным ключом и

, т. Е. ABC10001, ABC10002, ..... и так далее.

Без использования другой клавиши в качестве автоинкремента.Пожалуйста, не используйте два типа уникального ключа.

Ответы [ 3 ]

8 голосов
/ 14 июля 2010

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

По моему мнению, «требование», чтобы PK имели определенный формат, и «просто автоматическое увеличение» являются взаимоисключающими.

Это не значит, что вы не можете «подделать» его при выборе:

SELECT CONCAT('ABC1',LPAD(id,5,'0')) FROM tablename;
0 голосов
/ 14 июля 2010

Было бы плохой идеей реализовать это.Вам нужно будет определить следующее значение вручную, и тогда вы будете подвержены условиям гонки.Это может привести к серьезным проблемам с целостностью данных, которые невозможно исправить, если вы не правильно поняли это.Однако, если вы просто хотите отобразить номер с именем клиента, это возможно, но номера не будут в последовательности для клиента.(Я использую клиент в качестве примера, я действительно не знаю, что означают ваши префиксы), поэтому, если ABC001, DEF002, ABC003 приемлемы, просто объедините, чтобы получить число из вашего автоматического действительного идентификатора.

0 голосов
/ 14 июля 2010

В качестве альтернативы ответу Вриккена вы можете выбрать «следующее» значение из БД:

SELECT LPAD( max( substr( id, 5 ) ) +1, 4, '0' ) FROM tablename

А затем используйте это значение в следующем операторе вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...