侧边栏壁纸
博主头像
意义Meaning

每天过的都要有意义

  • 累计撰写 10 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Mysql的UUID_SHORT()

意义Meaning
2024-11-05 / 0 评论 / 0 点赞 / 24 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

UUID_SHORT()是 MySQL 中的一个函数,用于生成一个短的、唯一的 64 位整数。这些整数是基于当前时间和机器标识符生成的,具有全局唯一性,适合用作主键或唯一标识符。

项目场景:

例如:玩家注册,向玩家分配一个邀请码

问题描述:

提示:邀请码是提前生成好的,存储在一张表里,每个邀请码对应一个状态(0未使用 1使用)

邀请码使用逻辑:用户注册时,向用户分配一个邀请码。

邀请码分配逻辑:每次取一条未使用的记录,作为新的邀请码

可能出现的问题:当多个mysql连接同时执行玩家注册时,分配邀请码时,可能出现拿到同一个邀请码的情况,导致多个玩家分配得到的邀请码重复

解决方案:

1、邀请码记录表,增加一列uuid

2、每次获取空闲邀请码时,使用uuid_short生成唯一标识

3、将uuid更新至一条空闲的邀请码记录上(limit 1实现)

4、再通过select与uuid,将对应的邀请码查询出来,作为玩家的邀请码

5、结束。

至此,就解决了多个连接同时获取邀请码重复的问题

关键代码:

DECLARE uuidTmp VARCHAR(32) DEFAULT "";
DECLARE inviterCode INT DEFAULT 0;

-- 生成唯一标识

SET uuidTmp = uuid_short();

-- 更新记录,确保不被重复使用

UPDATE tb_tb_inviter_code_record SET state = 1,uuid=uuidTmp WHERE state=0 LIMIT 1;

-- 查询出对应的邀请码

SELECT number INTO inviterCode FROM tb_tb_inviter_code_record WHERE uuid = uuidTmp;

0

评论区