生成具有唯一名称的表

时间:2018-10-19 09:35:13

标签: sql node.js mariadb

我需要使用Node在MariaDB 10.3数据库中创建非临时表。因此,我需要一种生成可以保证唯一的表名的方法。

Node函数无法访问有关创建表或何时创建表的任何唯一功能的信息,因此无法通过时间戳或连接ID来构建名称。我只能使用当前数据库来验证名称的唯一性。

This question的PostgreSQL答案提示以下内容:

SET @name = GetBigRandomNumber();

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

我尝试使用@name = CONCAT(MD5(RAND()),MD5(RAND()))生成MariaDB实现以生成随机的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 :(得分:1)

SET @name := UUID();

如果其中的破折号引起了麻烦,那么

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

RAND()更安全(朝着唯一性发展)。并且,从理论上讲,无需验证其唯一性。毕竟,这就是UUID的目的。