- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理的一个非常具体的过程遇到问题,要么需要大约 45 秒才能运行,要么需要几分钟才能完成。我知道问题是什么,但老实说,目前我不确定如何解决它。在 SP 中,您将看到一个注释掉的部分 (while block
),它基本上是创建一个要插入到表中的 token ,目前我只插入 TEST
来绕过阻塞问题。
这是当前的工作版本,只需插入一个虚拟值即可正常运行。
BEGIN
DECLARE userexist INT(1);
DECLARE tokenID VARCHAR(12) default '';
DECLARE rnd_str text;
DECLARE ready int default 0;
DECLARE userID INT(20) default 0;
DECLARE lastID int default 0;
SELECT
su.User_ID,
1 AS user_exist
INTO userID, userexist
FROM System_User su
WHERE AES_DECRYPT(su.User_Email, 'AAAA') = email
AND AES_DECRYPT(su.User_Password, 'AAAA') = userpassword
AND su.User_Is_Active = 1;
IF userexist = 1 THEN
UPDATE System_User_Login
SET System_User_Login.System_Logout_Time = NOW(),
System_User_Login.System_Logout_Type = 1
WHERE System_User_Login.System_Login_User_ID = userID;
SET tokenID = 'TEST'; -- dummy value for now
INSERT INTO System_User_Login(System_Login_Time, System_Login_Token, System_Login_User_ID, System_Token_Valid_Period)
VALUES(NOW(), tokenID, userID, (NOW() + INTERVAL 30 DAY));
SET lastID = LAST_INSERT_ID();
-- WHILE ready = 0 DO
-- SET rnd_str = lpad(conv(floor(rand()*pow(36,16)), 12, 36), 12, 0);
-- IF NOT EXISTS (SELECT 1 FROM System_User_Login sul WHERE sul.System_Login_Token = rnd_str) THEN
-- update System_User_Login
-- SET System_Login_Token = rnd_str
-- WHERE System_Login_ID = lastID;
-- SET ready = 1;
-- END IF;
-- END WHILE;
SELECT
sul.System_Login_Token AS Token
FROM System_User_Login sul
WHERE sul.System_Login_ID = lastID;
ELSE
SELECT '0' AS Token;
END IF;
END
该过程中的 while 循环是创建一个要分配的新 token ;我在插入之前和之后都尝试过,但没有成功;甚至触发。我一定不会看到某些东西,或者需要重新考虑我的方法。
最佳答案
如果您的用户列表很高,那么这种冲突的可能性就会增加。这将导致多次迭代。您可以通过以下方式避免这种情况
1:如果使用 MySQL 8,您可以使用通用唯一标识符,但请确保长度限制符合您的要求。
2:尝试以下操作
Unique Identifier = CONCAT(<some_random_string>, unix_timestamp, <primary_key_id>)
因此,如果您要为 user = 4
设置 token 那么
SELECT LPAD(CONCAT(CONV(FLOOR(RAND()* POW(36,16)), 12, 36), UNIX_TIMESTAMP(), '4'), 25, 0);
UNIX_TIMESTAMP
将会使它独一无二。CONV(FLOOR(RAND()* POW(36,16)), 12, 36)
生成随机数来减少冲突。 假设:您不会在一秒钟内为同一用户创建多个 token ,否则可能会发生冲突。
注意:如果您使用第二种方法,则可以在完整过程中使用两个 SQL 语句。这是a way
关于mysql - DB超时或执行时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57845644/
我对如何在 Typescript 中对 API 进行建模有点困惑。 我正在尝试对 hexo 进行建模API,例如用法,看起来有点像这样: hexo.extend.tag.register(name,
我是一名优秀的程序员,十分优秀!