Генерация таблиц с уникальными именами - PullRequest
0 голосов
/ 19 октября 2018

Мне нужно создать невременные таблицы в базе данных MariaDB 10.3, используя Node.Поэтому мне нужен способ генерирования имени таблицы, которое гарантированно будет уникальным.

Функция узла не может получить доступ к информации, касающейся какой-либо уникальной функции о том, что или когда составлены таблицы, поэтому я не могу построить имя изметка времени или идентификатор соединения.Я могу только проверить уникальность имени, используя текущую базу данных.

На этот вопрос был ответ PostgreSQL, предлагающий следующее:

SET @name = GetBigRandomNumber();

WHILE TableExists(@name)
BEGIN
    SET @name = GetBigRandomNumber();
END

Я попытался реализовать MariaDB, используя @name = CONCAT(MD5(RAND()),MD5(RAND())) для генерации случайной 64-символьной строки и (COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE @name) >0 для проверки того, было ли это уникальное имя:

SET @name = CONCAT(MD5(RAND()),MD5(RAND()));
WHILE ((COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE @name) >0) DO
    SET @name = CONCAT(MD5(RAND()),MD5(RAND()));
END WHILE;
CREATE TABLE @name ( ... );

Однако при попытке выполнить вышеуказанный запрос я получаю синтаксическую ошибку.Мои знания SQL не так уж велики, поэтому я не знаю, в чем проблема.

Кроме того, эффективен ли этот подход?Произвольно генерируемое имя достаточно длинное, поэтому маловероятно, что оно будет конфликтовать с какой-либо текущей таблицей в базе данных, поэтому цикл WHILE будет очень редко запускаться, но есть ли какая-то встроенная функция для автоматического увеличения таблицыимена или что-то подобное?

1 Ответ

0 голосов
/ 25 октября 2018
SET @name := UUID();

Если штрихи в этом случае вызывают проблемы, то

SET @name := REPLACE(UUID(), '-', '');

Это будет безопаснее (по отношению к уникальности), чем RAND().И, теоретически, не нужно будет проверять его уникальность.В конце концов, это и есть цель UUID.

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