bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Генерировать уникальное значение?

Здравствуйте. Подскажите пожалуйста, как лучше всего решить такую задачу? Есть поле в таблице 'serialNumber' STRING(9), и нужно при создании записи, сгененировать уникальное значение, которого нет в базе, размер поля 9 знаков, ну и возможные знаки - "0-9".
Как вариант конечно можно в триггере, в цикле создавать рандомное число, а потом делать выборку в таблице наличие этого числа, пока выборка не вернет пустую запись.
Но может есть лучшее решение?

П.С. Есть один нюанс числа не должны быть подряд, это будет что-то типа серийного номера для лицензии
  • Вопрос задан
  • 384 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
create sequence serial_number_seq minvalue 1 maxvalue 999999999;


Сделать новое число - nextval('serial_number_seq')
Гарантированно уникально. К строке, если очень хочется, можете привести сами
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
взять последовательную цифру, взять соль1 и соль2, добавить к цифре соль1 - взять md5, добавить к значению соль2 - взять еще раз md5
SELECT MD5(MD5(CAST(id AS varchar)||'salt1')||'salt2') FROM table

Можно больше вложенность сделать - главное не "просрать" функцию
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы