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;
评论区