mysql function生成指定位数且不重复数字

会飞的鱼 1年前 ⋅ 414 阅读 ⋅ 0 个赞

1.生成指定位数且不重复数字

2.函数结构

CREATE DEFINER=`root`@`%` FUNCTION `fun_sn`(number BIGINT) RETURNS bigint(20)
BEGIN
	DECLARE v_flag TINYINT DEFAULT 1;
	DECLARE v_result BIGINT DEFAULT 0;
	DECLARE v_count INT(10) DEFAULT 0;
  DECLARE v_num VARCHAR(50) DEFAULT '';
  DECLARE i int DEFAULT 1;
	
	WHILE i<=number DO
		set v_num=CONCAT(v_num,'9');
		set i=i+1;
	END WHILE;
	
	REPEAT
		SELECT CAST(FLOOR(RAND() * v_num) AS SIGNED) INTO v_result;
			 SELECT COUNT(1) INTO v_count FROM s_say WHERE id = v_result;
			 IF v_count = 0 THEN
					SET v_flag=0;
			 END IF;
			 IF v_result = NULL||v_result = 0 THEN
					SET v_flag=1;
			 END IF;		
	UNTIL v_flag=0
	END REPEAT;

	RETURN v_result;
END

3.使用

SELECT fun_sn(10);

4.扩展

更换s_say表名和id字段名称即可

5.问题:

如果产生的随机数表里的id都存在就会进入死循环,所以我们尽量位数number设置大一点,不要设置两三位去跑。


全部评论: 0

    我有话说:

    mysql循环cursor游标模板

    此模板避免了,cursor循环遍历时候出现最后一次的重复 CREATE DEFINER=`root`@`%` PROCEDURE `proce_test`() BEGIN DECLARE v_col

    mysql 批量kill多个进程

    查看进程 show PROCESSLIST; +--------+--------+---------------------+------+---------+------+- | Id     | User  ...

    mysql GROUP BY去重报错,可以外面在套一层查询

    SELECT * FROM ( SELECT s.id, c.NAME FROM tbl_stu s, tbl_city c WHERE s.id = c.stu ) aa GROUP BY s.id, c.NAME

    手机黑屏开了机?

             正玩这手机但是手机突然黑屏开了机了,开机键无论怎么按完全起作用。焦急的心理欲哭无泪啊!下面给大家讲述一个强制开机的方法(我的是

    SpringBoot系列15-mysql-multiple-data-sources1

    springboot 多数据源的一个简单示例 多数据源分包加载 新建数据库test1和表tbl_user CREATE TABLE `tbl_user` ( `id` int(11) NOT

    thymeleaf onclick传值到function

    thymeleaf onclick传值到function 使用[[]] 例如: <span th:onclick="app.test([[${an.id}]])"/>测试click传值

    csdn博客专栏出bug了好久了,之前我申请的专栏不见了,我的专栏达人勋章也不见了,后面申请的专栏文章数量正确,热度也正确!

    csdn博客专栏出bug了好久了,之前我申请的专栏不见了,我的专栏达人勋章也不见了,后面申请的专栏文章数量正确,热度也正确!客服说工程师在修复,知道什么时候修复好啊!我之前的专栏知道还能

    我体重复胖中得到的经验

    你用多贵的口红别人一定知道,但是你胖瘦别人一眼就看得出来。 减肥成功 在去年之前我有胖过四年左右的时间,就是130以上140以下的体重,2017开始健身,喜欢跑步,就是任性跑,做拉伸。结果人还

    如果可以,我还是想去大城市生活

    我在大城市生活过,目前在小城市生活,最深的体会:小城市靠关系,大城市靠实力。生活在小城市,公平的事情远比大城市要多得多。靠关系,论父辈亲戚资源,常常能够轻松夺走普通人努力奋斗得到的大部分东西

    android(安卓)手机微信,qq,钉钉等app的、定位了怎么办?

    1.前言: 如今的应用不管是手机微信(微信小程序),qq,钉钉还是其他的应用的都会申请使用用户的位置信息,相机,电话,录音等等权限,如果授予相应权限那么app应用就无法使用 说明: 如何给手机微信

    java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)

    今天连接数据库老是报这个错误 java.sql.SQLException: Access denied for user ''@'localhost' (using password: YES)   查看properties文件后发现配...

    我29岁,想给自己一个一样的未来

    我29岁,想给自己一个一样的未来 人生处处是起点,而我从29岁开始起航,人生没有太晚的开始,只要你有开始的勇气。 我未来理想的生活 1.能够成为自由撰稿人,一边工作一边照顾孩子。 2.未来买一套

    我29岁,想给自己一个一样的未来

    人生处处是起点,而我从29岁开始起航,人生没有太晚的开始,只要你有开始的勇气。 我29岁,想给自己一个一样的未来 我未来理想的生活 1.能够成为自由撰稿人,一边工作一边照顾孩子。 2.未来买一套

    我害怕合群之人

    总听见说,你以为的合群只是在浪费时间,挤进去的圈子就用硬挤。 反倒是我更喜欢那种主动不合群、主动远离适合自己的圈子的人。 记得高中时候我们隔壁班的有一个小女生,我们班主任称她为小个,是因为她真

    把“我会”改成“我去学”

    我们从小到大就是从会到会,懂到懂的,谁都是一生下就是学富五车、满腹经纶,博闻强识的,都是通过后天的不断学习。 蔡康永曾说: 15岁觉得游泳难,放弃游泳,到18岁遇到一个你喜欢的人约你去游泳

    加入公众号
    加入公众号