gpt4 book ai didi

mysql - 使用带有 WHILE 循环的 MySQL 存储函数生成随机且唯一的 PIN

转载 作者:行者123 更新时间:2023-11-29 14:33:17 24 4
gpt4 key购买 nike

我正在尝试为 MySQL 编写一个存储函数来生成随机且唯一的 PIN,然后将其插入到数据库表中的“PIN”字段中。这必须由数据库完成,因为各种系统可能会查询数据库并调用此函数。

随机数是最简单的;我遇到的困难是检查生成的 PIN 码是否尚未使用的过程,如果是,则生成新的 PIN 码,直到我们获得新的 PIN 码。为了实现这一点,我尝试使用 WHILE 循环,但它似乎被卡住了,因为当我运行该函数时,MySQL 就会停止运行,CPU 会突然上升,直到我停止/重新启动服务。

这是我目前的功能:

DELIMITER @@
CREATE FUNCTION generate_unique_pin() RETURNS int(11)
BEGIN

DECLARE pin INT;
DECLARE myloop BOOL;
SET myloop = 1;

WHILE myloop = 1 DO
SET pin = FLOOR( RAND( ) * 99999999 );
IF (SELECT COUNT(*) AS used FROM mydb.mytable WHERE PIN = pin) = 0 THEN
SET myloop = 0;
END IF;
END WHILE;

RETURN pin;
END@@
DELIMITER ;

我也尝试过类似的东西

SET used = (SELECT COUNT(*) AS used FROM mydb.mytable WHERE PIN = pin)
IF used = 0 THEN (etc...)

但我仍然遇到同样的问题。随机数代码可以工作,因为如果我去掉循环位,该函数可以正常工作(只是不能保证唯一性),并且如果我单独运行它,查询也可以正常工作,返回带有“used”和 0 的记录集或1.

非常感谢您的帮助或建议!

最佳答案

您有 PINpin,一个列和一个名称几乎相同的变量,仅通过大小写进行区分。

让它们与众不同。

关于mysql - 使用带有 WHILE 循环的 MySQL 存储函数生成随机且唯一的 PIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9616215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com