MySQL 使用过程当中,经常需要有连续数字的表用来处理一些复杂的报表逻辑,这个blog介绍几种生成连续数字的表方法

如下,我需要生成一张表 id连续的从 1-50

文章目录

  • 一.自定义变量的方法
  • 二.存储过程的方法
  • 三.MySQL 8.0 With递归方法

一.自定义变量的方法

构造两个临时表 一个5一个10,通过笛卡尔积可以构造50行记录,即可构造50条记录

SELECT @xi:=@xi+1 as xc from (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc1, (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) xc2,  (SELECT @xi:=0) xc0

测试记录

mysql>
mysql> SELECT @xi:=@xi+1 as xc from->                  (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc1,->                  (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 U
SELECT 10) xc2,->                  (SELECT @xi:=0) xc0 ;
+------+
| xc   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
|    8 |
|    9 |
|   10 |
|   11 |
|   12 |
|   13 |
|   14 |
|   15 |
|   16 |
|   17 |
|   18 |
|   19 |
|   20 |
|   21 |
|   22 |
|   23 |
|   24 |
|   25 |
|   26 |
|   27 |
|   28 |
|   29 |
|   30 |
|   31 |
|   32 |
|   33 |
|   34 |
|   35 |
|   36 |
|   37 |
|   38 |
|   39 |
|   40 |
|   41 |
|   42 |
|   43 |
|   44 |
|   45 |
|   46 |
|   47 |
|   48 |
|   49 |
|   50 |
+------+
50 rows in set, 2 warnings (0.00 sec)mysql>

二.存储过程的方法

写存储过程,这个就会方便很多

drop table t;
create table t(id int);DELIMITER //create procedure p_ins_seq(in pi_num int)
BEGINdeclare l_n1 int default 1;truncate table t;while l_n1 <= pi_num DO  insert into t values (l_n1);set l_n1 = l_n1 + 1;end while;end;DELIMITER  ;call p_ins_seq(50);

测试记录

mysql>
mysql> drop table t;
Query OK, 0 rows affected (0.01 sec)mysql> create table t(id int);
Query OK, 0 rows affected (0.02 sec)mysql>
mysql>
mysql> DELIMITER //
mysql> create procedure p_ins_seq(in pi_num int)-> BEGIN->->    declare l_n1 int default 1;->->    truncate table t;->->    while l_n1 <= pi_num DO->      insert into t values (l_n1);->      set l_n1 = l_n1 + 1;->    end while;->-> end;-> //
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> DELIMITER ;
mysql>
mysql>
mysql> call p_ins_seq(50);
Query OK, 1 row affected (0.14 sec)mysql>
mysql> select * from t;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
|    8 |
|    9 |
|   10 |
|   11 |
|   12 |
|   13 |
|   14 |
|   15 |
|   16 |
|   17 |
|   18 |
|   19 |
|   20 |
|   21 |
|   22 |
|   23 |
|   24 |
|   25 |
|   26 |
|   27 |
|   28 |
|   29 |
|   30 |
|   31 |
|   32 |
|   33 |
|   34 |
|   35 |
|   36 |
|   37 |
|   38 |
|   39 |
|   40 |
|   41 |
|   42 |
|   43 |
|   44 |
|   45 |
|   46 |
|   47 |
|   48 |
|   49 |
|   50 |
+------+
50 rows in set (0.00 sec)

三.MySQL 8.0 With递归方法

MySQL 8.0开始支持with语法后,这个就大大的简便了

with recursive c(n) AS
(
select 1
union ALL
select n + 1
from c
where n < 50
)
select * from c;

测试记录

mysql> with recursive c(n) AS-> (-> select 1-> union ALL-> select n + 1-> from c-> where n < 50-> )-> select * from c;
+------+
| n    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
|    8 |
|    9 |
|   10 |
|   11 |
|   12 |
|   13 |
|   14 |
|   15 |
|   16 |
|   17 |
|   18 |
|   19 |
|   20 |
|   21 |
|   22 |
|   23 |
|   24 |
|   25 |
|   26 |
|   27 |
|   28 |
|   29 |
|   30 |
|   31 |
|   32 |
|   33 |
|   34 |
|   35 |
|   36 |
|   37 |
|   38 |
|   39 |
|   40 |
|   41 |
|   42 |
|   43 |
|   44 |
|   45 |
|   46 |
|   47 |
|   48 |
|   49 |
|   50 |
+------+
50 rows in set (0.00 sec)

MySQL生成连续数字相关推荐

  1. MySQL中如何随机产生验证码,MySQL 生成随机数字 UUID MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法...

    想了解MySQL 生成随机数字.字符串.日期.验证码及 UUID的方法的相关内容吗,不剪发的Tony老师在本文为您仔细讲解MySQL 生成随机数字 UUID的相关知识和一些Code实例,欢迎阅读和指正 ...

  2. 【mySql】利用笛卡尔积生成连续数字

    原理: 有2行数据的表a和有3行数据的表b进行笛卡尔积(第三个c表只有一个数据xi=0,不会增加结果表的行数), 会生成2x3=6行数据的结果表,在select时将变量自加1,可得到连续数字. 仅需要 ...

  3. MySQL 生成随机数字、字符串、日期、验证码以及 UUID

    文章目录 生成随机数字 生成 0 到 1 之间的随机数 生成指定范围内的随机数 生成 6 位数字手机验证码 生成遵循正态分布的随机数 生成随机字符串 生成固定长度的随机字符串 生成可变长度的随机字符串 ...

  4. Mysql生成连续时间段记录

    需求说明 基于某个起始日期值,比如'2021-9-1',生成其之后的30天数据,结果类似: 2021-09-02.2021-09-03.2021-09-04... 问题分析 该需要看似简单,但想不借助 ...

  5. mysql 生成随机数 —— 数字、字符串、手机号、日期、姓名、一段中文汉字

    文章目录 1.随机数字 2.随机生成 几位的字符串 3.随机生成 手机号 4.随机生成日期 4.1.日期(yyyy-MM-dd HH:mm:ss) 4.2.日期(yyyy-MM-dd ) 5.生成姓名 ...

  6. gvim中利用录制宏产生连续数字

    方法步骤: a-->0-->Esc-->qa -->yy-->p--Ctrl + a -->yy --> p -->Ctrl + a -->q - ...

  7. mysql生成随机验证码_MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法...

    上一篇介绍了如何在 Oracle 生成随机数字.字符串.日期.验证码以及 UUID,今天我们继续讨论在 MySQL 中生成各种随机数据的方法.

  8. Mysql 生成不重复的随机数字

    在网上查找Mysql 生成不重复的随机数字 ,竟然没找到合适的例子. 其实思路很简单,利用MySQL现有的函数,然后进行加工处理,达到预期的结果.可以用到的MySQL函数为rand() ,以及 rou ...

  9. mysql中随机16位数字_MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法

    上一篇介绍了如何在 Oracle 生成随机数字.字符串.日期.验证码以及 UUID,今天我们继续讨论在 MySQL 中生成各种随机数据的方法.

  10. mysql 生成随机(数字、英文字符、汉字函数)

    生成随机英文字符 delimiter $$ drop function if exists rand_string; create function rand_string(n int) return ...

最新文章

  1. TCP/IP详解--第十二章
  2. Java根据当前日期获得这一周的日期
  3. iphone刷基带_iphone7基带坏了怎么办,iphone7基带修复多少钱
  4. java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)
  5. 今天看到一个热搜,说一个美团会员配送费6元,普通用户2元,导致轩然大波
  6. win10 sshsecureshellclient删除profile保存的信息
  7. ABP应用层——参数有效性验证
  8. python日期时间_Python日期时间
  9. 在C#中如何读取枚举值的描述属性
  10. 机器学习系列全集,301页PDF精心整理!
  11. 计算机 国际顶尖级会议排名,计算机学科国际会议排名
  12. 图像处理Task05图像分割/二值化
  13. 当百度与重庆相遇,李彦宏的AI越过山丘?
  14. 用ffmpeg修改MP4文件头信息,使其支持流式加载及播放
  15. 性能分析系列-小命令保证大性能
  16. ##Windows 10纯净版下载##
  17. 今日总结:错误码配置,关于TXT文件下载问题
  18. 计算机下面添加桌面,电脑系统教程_win7中如何在库中添加桌面
  19. java实现沙箱测试环境支付宝支付(demo)和整合微信支付和支付宝支付到ssm环境全过程(附源码)...
  20. Python打包与解压zip

热门文章

  1. 分享个一拳超人辅助脚本,自动挂机刷金币/经验/副本工具
  2. 使用elasticSearch实现以图搜图
  3. 国内常用地图坐标系总结
  4. JavaScript代码模拟鼠标自动点击事件
  5. 桥接模式、NAT模式和仅主机模式
  6. 百度收录如何API提交(java、python)
  7. 【git】小甲鱼Git教程《极客Python之Git实用教程》笔记一
  8. ipa安装失败,以及安装办法
  9. kubernetes快速切换集群和名称空间
  10. wi7计算机桌面删除,如何删除win7系统桌面IE图标|win7删除桌面IE图标的方法