Лучший подход для генерации непредсказуемого случайного идентификатора? - PullRequest
0 голосов
/ 28 февраля 2020

Я бы хотел сгенерировать какой-то идентификатор, не используя AUTO INCREMENT, поскольку я не хочу, чтобы люди могли создавать небольшой скрипт и просматривать всю базу данных. Как бы мне сгенерировать такие идентификаторы, чтобы убедиться, что они уникальны и просты для запроса?

Я использую SQLite и nodeJS, хотя в будущем планирую перейти на что-то более надежное.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Используйте обычный столбец INTEGER PRIMARY KEY, но не используйте AUTOINCREMENT (который вы обычно не хотите использовать в любом случае). Затем вставьте строку с rowid 9223372036854775807, максимально возможный. Дальнейшие вставки без указанного rowid выберут случайный неиспользованный. Подробности .

Пример:

CREATE TABLE ex(id INTEGER PRIMARY KEY, x);
INSERT INTO ex VALUES (9223372036854775807, null);
INSERT INTO ex(x) VALUES ('foo');  -- uses a random id
SELECT last_insert_rowid();
0 голосов
/ 28 февраля 2020

SQLite имеет следующие функции ( Список ):

  • random
  • randomblob

Чтобы вы могли например, сгенерировать GUID, подобный этому, используя SQLite, но это уродливо; -)

(маловероятно, что одно и то же значение будет получено дважды, но добавить ограничение UNIQUE для безопасности)

SELECT SUBSTR(UPPER(HEX(RANDOMBLOB(16))), 1, 8) || '-' ||
SUBSTR(UPPER(HEX(RANDOMBLOB(16))), 9, 4) || '-' ||
SUBSTR(UPPER(HEX(RANDOMBLOB(16))), 13, 4) || '-' ||
SUBSTR(UPPER(HEX(RANDOMBLOB(16))), 17, 4) || '-' ||
SUBSTR(UPPER(HEX(RANDOMBLOB(16))), 21, 12) AS guid

Пример: 3326836A-881A-25D0-234F-F64A04EBD990

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