关于数据库UUID自写函数的一些总结

1、使用 时间戳的方式创建UUID函数

CREATE OR REPLACE FUNCTION "WANGSHN01".uuid_generate_v1()
 RETURNS text
 LANGUAGE plpgsql
 NOT FENCED NOT SHIPPABLE
AS $$ BEGIN RETURN TO_NUMBER(now()::text, '9999999999999999999999999999999999999999'); END; $$;
/

 

这种实现方式逻辑简单一些,但是在大并发的情况下 会出现 生成uuid相同的场景。

 

2、使用随机数的方式创建UUID函数

CREATE OR REPLACE FUNCTION wangshn01.uuid_generate_v1()
 RETURNS character varying
 LANGUAGE plpgsql
 STRICT NOT FENCED NOT SHIPPABLE
AS $$
DECLARE
  chars_str VARCHAR(100) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  return_str VARCHAR(36) DEFAULT '';
  i INT DEFAULT 0;
BEGIN
  WHILE i < 36 LOOP
    return_str := CONCAT(return_str,SUBSTRING(chars_str , FLOOR(1 + RANDOM()*62 ),1));
    i := i + 1;
  END LOOP;
  RETURN return_str;
END;
$$;
/

  

使用随机数的方式创建UUID函数,理论上是可以避免大并发情况下生成相同UUID的问题。但是存在概率学的问题。

posted @ 2023-09-22 16:05  小清澈  阅读(140)  评论(0)    收藏  举报