Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 生成具有唯一名称的表_Sql_Node.js_Mariadb - Fatal编程技术网

Sql 生成具有唯一名称的表

Sql 生成具有唯一名称的表,sql,node.js,mariadb,Sql,Node.js,Mariadb,我需要使用Node在MariaDB 10.3数据库中创建非临时表。因此,我需要一种生成保证唯一的表名的方法 节点函数无法访问有关创建表的内容或时间的任何唯一功能的信息,因此我无法根据时间戳或连接ID生成名称。我只能使用当前数据库验证名称的唯一性 有一个PostgreSQL的答案建议如下: SET @name = GetBigRandomNumber(); WHILE TableExists(@name) BEGIN SET @name = GetBigRandomNumber(); E

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

节点函数无法访问有关创建表的内容或时间的任何唯一功能的信息,因此我无法根据时间戳或连接ID生成名称。我只能使用当前数据库验证名称的唯一性

有一个PostgreSQL的答案建议如下:

SET @name = GetBigRandomNumber();

WHILE TableExists(@name)
BEGIN
    SET @name = GetBigRandomNumber();
END
我尝试使用
@name=CONCAT(MD5(RAND()),MD5(RAND())
生成一个随机的64字符字符串,并使用
(COUNT(*)从INFORMATION_SCHEMA.TABLES(其中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
循环,但是是否有某种内置函数来自动递增表名或类似的内容

SET @name := UUID();
如果那条破折号引起麻烦,那么

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

它将比
RAND()
更安全(朝向唯一性)。而且,从理论上讲,无需验证其唯一性。毕竟,这就是UUID的目的。

。对于应用程序使用的数据模型,生成随机表名的需要似乎是一个真正的问题。我怀疑你可能有更深层次的问题。@GordonLinoff很可能就是这样。该应用程序允许用户创建和协作项目。我将每个项目存储在一个单独的表中;因此,当用户创建新项目时,相应的表必须具有唯一的名称。(老实说,我可以将用户ID和时间戳组合成一个唯一的名称,但我想看看是否可以仅使用SQL实现这一点)。这可能是一个不好的模型使用-我没有太多的经验与数据库,所以以我有限的知识,这是什么有意义时,设计的概念。这些都应该是单个表中的行。如果您有安全要求——用户数据需要与其他用户物理隔离——那么您应该使用单独的数据库。@GordonLinoff谢谢,非常有用!我可以问一下:为什么把它们放在一张桌子上会更好?效率?性能、可维护性、安全性和分析效率都在我脑海中浮现。我最终按照@GordonLinoff的建议重新构建了数据模式,使用一个表,但这似乎是解决原始问题的一个非常优雅的解决方案。