powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Генерация собственного уникального идентификатора записи
10 сообщений из 10, страница 1 из 1
Генерация собственного уникального идентификатора записи
    #38346576
Firmware 1.01b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, комрады.

Стоит следующая задача: нужно генерировать для каждой записи в БД уникальный ИД, по которому так же можно определить к какой таблице он относится.

Генерировать буду хранимой процедурой MySQL, чтобы не создавать по два запроса в PHP. ИД будет настраиваемый по длине и состоит из латинский букв и чисел (1-0 A-Z a-z), причем первых два символа это будет ИД таблицы, например PR0001Qf, PR0001Qg, PR0001Qh. От генерации по UUID() отказался т.к. слишком большая длина, а UUID_SHORT() имеет ограничение уникальности при server_id > 255 и другие недостатки.

1. Но, что же получается, мне что нужно перед каждым INSERTом лочить таблицу на чтение и запись? Ведь теоретически в промежуток времени, между началом генерации нового ИД и вставкой его в таблицу, второй клиент может так же попробовать сгенерировать новый ИД, который будет не уникальным. Как избежать коллизий?

2. Как получить идентификатор вставленной записи? Как вариант вижу делать все вставки через хранимые функции MySQL, но не хочется.

Интересуют так же ваши мысли по поводу.
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38346765
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bigint unsigned

для каждой таблицы auto_increment x
где х -1, -2, -3 и так далее. это будет id таблицы

все остальное работает как обычно

чтобы получить id таблицы надо замаскировать старший байт id любой записи. Это значит таблиц не может быть больше 254
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38346767
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, типичная система хранения двух чисел в одном слове. Например старшие 4 бита одно число, младшие 4 другое. Так устроена двоично-десятичная система. Ее можно расширить и сделать так, что в старшем байте одно число, а во всех остальных 7 байтах - другое. Малеькие отрицательные числа удобно юзать чтобы не юзать огромные положительные числа для добавления и маскирования.
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38346770
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например для байта, 8 бит, без знака, -1 это 2^8-1, или 254. Для 8 байт, bigint, соответственно 2^64-1 или... посчитайте на калькуляторе. 8)
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38346916
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Firmware 1.01bДоброго времени суток, комрады.

Стоит следующая задача: нужно генерировать для каждой записи в БД уникальный ИД, по которому так же можно определить к какой таблице он относится.

Генерировать буду хранимой процедурой MySQL, чтобы не создавать по два запроса в PHP. ИД будет настраиваемый по длине и состоит из латинский букв и чисел (1-0 A-Z a-z), причем первых два символа это будет ИД таблицы, например PR0001Qf, PR0001Qg, PR0001Qh. От генерации по UUID() отказался т.к. слишком большая длина, а UUID_SHORT() имеет ограничение уникальности при server_id > 255 и другие недостатки.

1. Но, что же получается, мне что нужно перед каждым INSERTом лочить таблицу на чтение и запись? Ведь теоретически в промежуток времени, между началом генерации нового ИД и вставкой его в таблицу, второй клиент может так же попробовать сгенерировать новый ИД, который будет не уникальным. Как избежать коллизий?

2. Как получить идентификатор вставленной записи? Как вариант вижу делать все вставки через хранимые функции MySQL, но не хочется.

Интересуют так же ваши мысли по поводу.

как часто говорят - хочешь помощи,

ПРЕЖДЕ ВСЕГО - опиши задачу а не свой способ решения.
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38346955
Firmware 1.01b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453Firmware 1.01bДоброго времени суток, комрады.

Стоит следующая задача: нужно генерировать для каждой записи в БД уникальный ИД, по которому так же можно определить к какой таблице он относится.

...

как часто говорят - хочешь помощи,

ПРЕЖДЕ ВСЕГО - опиши задачу а не свой способ решения.
[quot Firmware 1.01b]
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38346958
Firmware 1.01b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerbigint unsigned

для каждой таблицы auto_increment x
где х -1, -2, -3 и так далее. это будет id таблицы

все остальное работает как обычно

чтобы получить id таблицы надо замаскировать старший байт id любой записи. Это значит таблиц не может быть больше 254

Спасибо, отличный вариант, единственное - не наглядно и в GET запросе будут монстры типа /?city=71776119061217531&orderid=70368744177671669

И еще момент, когда пользователь TRUNCATEнет таблицу, AI сбрасывается. Установить начальное значение AI он не сможет, а очень хочется, чтобы все было юзер френдли:)
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38347011
=)8)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Firmware 1.01bИ еще момент, когда пользователь TRUNCATEнет таблицу, AI сбрасывается. Установить начальное значение AI он не сможет, а очень хочется, чтобы все было юзер френдли:)Прикольный интерфейс... Операция TRUNCATE TABLE - лучший друг пользователя
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38347257
Firmware 1.01b
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=)8), в интерфейсе не будет TRUNCATE, просто есть вероятность, что пользователь так сделать через ПМА.
...
Рейтинг: 0 / 0
Генерация собственного уникального идентификатора записи
    #38347989
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Firmware 1.01bСпасибо, отличный вариант, единственное - не наглядно и в GET запросе будут монстры типа /?city=71776119061217531&orderid=70368744177671669

А вы их в hex загоните, станет красивее немного.

Однако можете выбрать - красивые буковки в урле и геморрой в запросах и процедурах, или наоборот. Все равно будет геморрой, прозрачно же не получится.

Кстати, обратите внимание на get у гугля при запросе "проверка". Насколько наглядно? И кто-то парится?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Генерация собственного уникального идентификатора записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]