代码之家  ›  专栏  ›  技术社区  ›  jla

生成具有唯一名称的表

  •  0
  • jla  · 技术社区  · 7 年前

    我需要使用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 循环很少需要运行,但是是否有某种内置函数来自动递增表名,或者类似的东西?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Rick James diyism    7 年前
    SET @name := UUID();
    

    如果那条破折号引起麻烦,那么

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

    RAND() . 而且,从理论上讲,不需要验证它的唯一性。毕竟,这就是uuid的目的。

    推荐文章