我需要使用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()))
生成一个随机的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 ( ... );
此外,这种方法有效吗?随机生成的名称足够长,不太可能与数据库中的任何当前表发生冲突,因此
WHILE
循环很少需要运行,但是是否有某种内置函数来自动递增表名,或者类似的东西?