Мне нужно создать невременные таблицы в базе данных 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
будет очень редко запускаться, но есть ли какая-то встроенная функция для автоматического увеличения таблицыимена или что-то подобное?