关于数据库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的问题。但是存在概率学的问题。
努力让自己变得不那么low

浙公网安备 33010602011771号